假设我有以下数据类型
data A = A{x::Int,y::Int,z::Int}
有没有办法在所有字段上应用 0 来得到这样的东西:
let a = A 0 0 0
基本不重复
0
最后的目标是使用
mempty
来自 Sum Int
并做这样的事情:let a = myfunction mempty :: Sum Int
并有
a == A 0 0 0
谢谢 !
最佳答案
没有一个功能,但您可以编写 Control.Monad.join
与自己。您还必须打开 0
的包装来自 mempty
首先,因为它有类型 Sum Int
,不是 Int
.
let a = (join . join) A (getSum mempty)
然后您可以定义
myfunction
已myfunction = (join . join) A . getSum
和写
let a = myfunction (mempty :: Sum Int)
myfunction
更直接的定义,不过,只是myfunction (Sum x) = A x x x
关于haskell - 将常量应用于数据类型的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61028175/