0
我正在通過this paper閱讀,它說,猿人是幻影應用仿函數。如何在PureScript中製作幻影應用仿函數?
我試着在purescript中設置一個幻像類型,但我在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'是一個常量函子。 'map'任何函數'f:a-> b'會產生'map f :: Accy oa - > Accy ob'應該完全忽略'f',因爲沒有圍繞'a'類型的參數(只有'o '可用)。 – chi