【发布时间】:2011-07-23 06:26:34
【问题描述】:
我用以下方法构建了二叉树:
data Tree a = Empty
| Node a (Tree a) (Tree a)
deriving (Eq, Ord, Read, Show)
如何为这棵树创建 Monad 类型的类实例?我可以不上吗?
我试试:
instance Monad Tree where
return x = Node x Empty Empty
Empty >>= f = Empty
(Node x Empty Empty) >>= f = f x
但我不能为节点 x 左右制作 (>>=)。
谢谢。
【问题讨论】:
-
这取决于您希望
join :: Tree (Tree a) -> Tree a的行为方式,真的。 -
正如@dave4420 所说,想想
join。您可以让join进行替换,然后Tree将成为一个单子。