【发布时间】:2013-05-29 14:14:53
【问题描述】:
我有数据类型:
data Stuff s = Stuff { name :: s, idx :: Int }
并希望通过以下实现将其变成一个幺半群:
tmappend :: Stuff s -> Stuff t -> Stuff (s,t)
tmappend s1 s2 = Stuff (name s1, name s2) (idx s1 + idx s2)
tzero :: Stuff ()
tzero = Stuff () 0
请注意,可以通过mconcat 获得任意嵌套的元组。
但是 tmappend 当前违反了mappend 的类型签名。这实际上是一个幺半群吗?能不能做成一个更好的类型表示。
【问题讨论】:
标签: haskell algebraic-data-types monoids