gpt4 book ai didi

haskell - 如何使用泛型提取特定类型的所有值?

转载 作者:行者123 更新时间:2023-12-04 14:55:10 24 4
gpt4 key购买 nike

我有这样的数据类型:

data MyType = Foo Bool
| Bar
| Baz Bool (Maybe String) Bool
| Quux Int String

可以用泛型写函数吗 getBools :: MyType -> [Bool]返回输入中所有 bool 字段的列表?

我想出了这个类型签名:
getAllOfType ::
(Generic inner, Generic outer, HasDatatypeInfo inner, All2 HasDatatypeInfo (Code outer)) =>
Proxy inner -> outer -> [inner]

使用 generics-sop ,但我认为这是不对的。比较 DatatypeInfo s 不会让类型检查器相信这两种类型是等价的。

最佳答案

使用 uniplate :

{-# LANGUAGE DeriveDataTypeable #-}

module M where

import Data.Data
import Data.Generics.Uniplate.Data

data MyType
= Foo Bool
| Bar
| Baz Bool (Maybe String) Bool
| Quux Int String
deriving Data

getBools :: MyType -> [Bool]
getBools = universeBi

关于haskell - 如何使用泛型提取特定类型的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45245481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com