1
이진 트리의 모나드에 대해 (>> =)을 올바르게 구현하는 방법을 이해하는 데 어려움이 있습니다. 나는 다음과 같은 이진 트리가 :이진 트리 모나드 구현
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)
그래서 내가 돈을 '여기
data BinTree a = Leaf a | Node a (BinTree a) (BinTree a)
deriving (Eq, Ord, Show, Read)
을 내 모나드에 대한 (>> =) 연산자이다 올바른 잎 모양을 얻을 수있는 방법을 이해하고 있습니까?
어떤 도움
감사
을 감사
감사합니다. 나는 결과를 묶는 것을 생각하지 않았다. – charles
IMO, LHS의 팸플릿은 읽기 쉽지 않습니다. 나는이'Node x l r >> = f' \ n'= f x >> = ...'을 쓰고 싶다. – leftaroundabout
나는 같은 방식으로 Monad typeclass를 구현했다. 그러나이 컴파일을 실행하면 항상 무한 루프가됩니다. 제 생각에이 Tree-type에 대한 Monad typeclass를 구현하는 것은 불가능합니다. 아니면 내가 틀렸어? – user4587483