"http://learnyouahaskell.com"의 도움으로 하스켈을 배우고 있습니다. 나는이 접힌 나무를 나타내는 목록을 F.foldMap (\x -> [x]) testTree
을 실행하면Foldable은 mappend의 구현을 어떻게 알 수 있습니까?
data Tree a = Nil | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)
instance F.Foldable Tree where
foldMap f Nil = mempty
foldMap f (Node x l r) = (F.foldMap f l) `mappend` (f x) `mappend` (F.foldMap f r)
: 나는 Foldable
의 인스턴스가있는 BST (이진 검색 트리)의 예를 다음입니다. 난 내 자신의 데이터 형식 구현 :
newtype OnlySum a = OnlySum {value :: a} deriving (Eq, Ord, Read, Show, Bounded)
instance Num a => Monoid (OnlySum a) where
mempty = OnlySum 0
OnlySum x `mappend` OnlySum y = OnlySum (x + y)
을 그리고이 명령을 실행 :이 OnlySum {value = 34}
로 접어 트리를 얻을 F.foldMap (\x -> OnlySum x) testTree
을.
질문 : 어떻게 접이식는 foldMap
에 전달하는 기능 f
의 반환 유형에 따라 mempty
및 mappend
의 정의를 알고 있나요? 하스켈이 그 정의를 자동으로 알 수있는 방법이 있을까요?
그래서 기본적으로 다형성이 있습니다. 그렇지 않습니까? – OneEyeQuestion
@OneEyeQuestion 네, 반환 유형에 대한 다형성 일뿐입니다. – bheklilr
예, 유형이 문제를 해결하는 것 이상의 역할을합니다. 유형에 따라 지루한 런타임 코드가 생성됩니다. 타입을 작성할 때 코드를 저장하는 경우, 코드를 쓰는 것이 좋습니다. – pigworker