haskell - 将常量应用于数据类型的所有字段

标签 haskell

假设我有以下数据类型

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/

相关文章:

haskell - Cabal 包安装失败

haskell - 如何使用 Haskell 提交 html 表单

haskell - 在 Haskell 中简化一个丑陋的函数

Haskell:将 Char 转换为 Word8 的函数

haskell - 为 Fix 编写一个 Eq 实例 (Haskell)

haskell - 带有Deepseq的Par Monad和Eval Monad之间的区别

haskell - Haskell中的记录有替代品吗?

haskell - 通过净力计算位置,不同的dts产生不同的答案

haskell - Haskell中的模型交换

haskell - haskell中的递归仿函数实例