是否可以++
在Haskell中为自定义数据类型定义自己的运算符?
我有:
data MyType = MyType [String]
Run Code Online (Sandbox Code Playgroud)
我想将我自己的连接运算符定义为:
instance ? MyType where
(MyType x) ++ (MyType y) = MyType (x ++ y)
Run Code Online (Sandbox Code Playgroud)
我似乎无法在任何地方找到实例类的名称.
Dan*_*her 13
如果您不坚持致电运营商(++)
,
import Data.Monoid
instance Monoid MyType where
(MyType x) `mappend` (MyType y) = MyType (x ++ y)
mempty = MyType []
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
(<>) :: Monoid m => m -> m -> m
Run Code Online (Sandbox Code Playgroud)
这是别名mappend
(我以为它已经是类型类成员,但它不是:/).列出哈瓦一个Monoid
实例,其中mappend
是(++)
,这样会对你的愿望.该Monoid
实例也给了你
mconcat :: Monoid m => [m] -> m
Run Code Online (Sandbox Code Playgroud)
你可以用它来连接一个MyType
s 列表.