sonra sabit bir noktaya yaptıktan sonra funktoru örneğini elde etmek değil nasıl eminim: Fazladan tipi parametresini kabul etmek Mu değiştirirsenizbifunctor az sabit tip
data FreeF f a next = PureF a | FreeF (f next) deriving (Functor)
data Mu f = In { out :: f (Mu f) }
newtype Free f a = Free( Mu (FreeF f a) )
instance Functor f => Functor (Free f) where
fmap h (Free (out -> PureF a)) = Free (In (PureF (h a)))
fmap h (Free (out -> FreeF fn)) = Free (In (fmap undefined undefined)) --stuck
, ben gelene kadar ilerleyebilir. ..:
data Mu f a = In { out :: f (Mu f a) } deriving (Functor)
newtype Free f a = Free( Mu (FreeF f a) a)
instance Functor f => Functor (Free f) where
fmap h (Free (out -> PureF a)) = Free . In . PureF $ h a
fmap h (Free (out -> FreeF fn)) = Free . In . FreeF $ fmap undefined fn
İşte undefined :: Mu (FreeF f a) a -> Mu (FreeF f b) b
ama mu f
aynı f
için funktoru ve burada tip değişir olması gerekir.
Bunu düzeltmenin doğru yolu nedir?
değil. gereksiz mi?(her iki olayda) – chi
öyle. Sanırım tip deliklerini biraz aptalca takip ettim. Düzenlenen. –