Mik*_*ike 3 haskell custom-type
我想编写一个Haskell函数,该函数采用带有11个字段的自定义类型,并返回所有字段值的列表,或者将字段名称与其值相关联的映射.我不想明确地获得每一个领域,因为那将是冗长而且不那么通用的.有没有办法做到这一点?
你写的东西在某种程度上是可能的,但它不会很有用.
让我们想象一下我们坚持写这个功能片刻.鉴于字段的值可能有不同的类型,您可能更愿意产生一个元组.即
data MyType = MyType Int String Bool
getFields :: MyType -> (Int, String, Bool)
getFields (MyType a b c) = (a,b,c)
Run Code Online (Sandbox Code Playgroud)
所以你现在可以称之为
let v = MyType 1 "Hello" True
let (x, y, z) = getFields v
Run Code Online (Sandbox Code Playgroud)
现在,这实际上并不是非常有用,因为您可以在所有这些情况下使用模式匹配,例如
let v = MyType 1 "Hello" True
let (MyType x y z) = v
Run Code Online (Sandbox Code Playgroud)
好吧,但如果你想解决个别领域呢?喜欢
let x = fst (getFields v)
Run Code Online (Sandbox Code Playgroud)
...没有'getFields'功能怎么做?好吧,你可以简单地指定字段名称(正如你可能已经做过的那样):
data MyType = MyType
{ i :: Int
, s :: String
, b :: Bool
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以免费访问各个字段的功能:
let x = i v
Run Code Online (Sandbox Code Playgroud)
...因为分配名称ot字段实际上生成像i :: MyType -> Int或的函数s :: MyType -> String.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |