1
我有困難,瞭解如何正確地實現(>> =)二叉樹的單子。我有以下二叉樹:二叉樹單子實施
data BinTree a = Leaf a | Node a (BinTree a) (BinTree a)
deriving (Eq, Ord, Show, Read)
這裏的(>> =)運算符爲我的單子:
Node x l r >>= f = Node (f x) (l >>= f) (r >>= f)
__________^
我不斷收到此錯誤:
Couldn't match type `b' with `BinTree b'
`b' is a rigid type variable bound by
the type signature for
>>= :: BinTree a -> (a -> BinTree b) -> BinTree b
at test.hs:153:5
In the return type of a call of `f'
In the first argument of `Node', namely `(f x)'
In the expression: Node (f x) (l >>= f) (r >>= f)
所以我不瞭解我如何才能獲得正確類型的適當葉子?
任何幫助表示讚賞
感謝
謝謝!我沒有想到對結果有約束力。 – charles
IMO,在LHS的括號使其相當的可讀性。我寧願寫這個'Node x l r >> = f' \ n'= f x >> = ...'。 – leftaroundabout
我實現了單子類型類相同的方式。它編譯得很好,但是,執行這個時總會以無限循環結束。 從我的角度來看,這是不可能實現的單子類型類爲這棵樹型。或者我錯了? – user4587483