5

私はデータ型を持っています:

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ます。これは本当にモノイドですか?より良い型表現を持つものにすることはできますか?

4

1 に答える 1