필 프리먼 (Phil Freeman)의 PureScript 책 섹션 6.7에서 연습 문제 5를 완료하려고합니다. 이 연습에서는 다음 유형에 대해 Foldable
인스턴스를 작성하려고합니다.foldMap에서 foldrDefault와 foldlDefault를 어떻게 사용합니까?
data NonEmpty a = NonEmpty a (Array a)
foldMap
을 구현하여이 사례를 작성했습니다.
instance foldableNonEmpty :: Foldable a => Foldable NonEmpty where
foldMap :: forall a m. Monoid m => (a -> m) -> NonEmpty a -> m
foldMap f (NonEmpty x xs) = (f x) <> (foldMap f xs)
foldr :: forall a b. (a -> b -> b) -> b -> NonEmpty a -> b
foldr f = foldrDefault f
foldl f = foldlDefault f
그러나 다음과 같은 오류가 발생합니다.
Error found:
in module Data.Hashable
at src/Data/Hashable.purs line 110, column 11 - line 110, column 23
No type class instance was found for
Data.Foldable.Foldable t2
The instance head contains unknown type variables. Consider adding a type annotation.
while checking that type forall f a b. Foldable f => (a -> b -> b) -> b -> f a -> b
is at least as general as type (a0 -> b1 -> b1) -> b1 -> NonEmpty a0 -> b1
while checking that expression foldrDefault
has type (a0 -> b1 -> b1) -> b1 -> NonEmpty a0 -> b1
in value declaration foldableNonEmpty
where b1 is a rigid type variable
bound at line 110, column 11 - line 110, column 23
a0 is a rigid type variable
bound at line 110, column 11 - line 110, column 23
t2 is an unknown type
나는 foldr = foldrDefault
가 NonEmpty
가 내가 인스턴스에 노력하고있어,하지만 내가 어떻게 기본 배의 구현을 사용하는 아무 생각이 무엇을 할 때 이미 접을 수있는 컴파일러를 의미하기 때문에 오류를 받고 있어요 생각합니다. 어떤 도움이라도 대단히 감사하겠습니다.