0
저는 this paper을 읽고 있습니다. 그리고 그것은 Monoids가 팬텀 응용 펑터라고 말합니다.PureScript에서 팬텀 응용 펑터를 만드는 방법은 무엇입니까?
purycript에 팬텀 유형을 설정하려고 시도했지만 Functor 인스턴스에 유형 오류가 발생합니다. 내 생각 엔 컴파일러는 a
이지도를 작성한 후 Accy o a
에 무엇이 있는지 모른다. 어떻게 수정하겠습니까?
newtype Accy o a = Accy { acc :: o }
instance mapaccy :: (Monoid o) => Functor (Accy o) where
map f (Accy { acc : a }) = Accy { acc : (f a) }
instance maccy :: (Monoid o) => Apply (Accy o) where
apply (Accy { acc : f }) (Accy { acc : a }) = (Accy { acc : f <> a })
instance mpp :: (Monoid o) => Applicative (Accy o) where
pure _ = Accy { acc : mempty }
instance msemi :: (Monoid o) => Semigroup (Accy o a) where
append (Accy { acc : a }) (Accy { acc : b }) = Accy { acc : (a <> b) }
map f (Accy { acc : a }) = Accy { acc : (f a) }
^
Could not match type
o2
with type
a0
while checking that type t1
is at least as general as type a0
while checking that expression a
has type a0
in value declaration mapaccy
'Accy o'는 상수 functor입니다. 'f : a-> b' 함수를'map '하는 것은'f '를 무시해야하는'map f :: Accy oa -> Accy ob'를 생성 할 것입니다.'a' 타입의 인자가 없기 때문에 ('o '가능). – chi