假设我有以下代码:
data LiftItOut f a = LiftItOut (f a)
deriving Show
instance (Functor fct) => Functor (LiftItOut fct) where
fmap f (LiftItOut fctor) = LiftItOut (fmap f fctor)
如果我尝试调用fmap (\x-> 3 x) (LiftItOut (+3))
,它不工作。但是,它工作不是很有意义吗?结果将是LiftItOut (fmap (\x ->3 x) (+3))
,并且,正如我所看到的,3将被馈送到(+3),结果将被 Package 在LiftItOut中。我在learnyouahaskell上读到了 (-〉r) 函子,尽管它没有引起我的兴趣。感谢任何帮助
1条答案
按热度按时间xesrikrc1#
你是对的,因为你会得到
LiftItOut (fmap (\x -> 3 x) (+3))
,你正确地识别出感兴趣的 Package 函子是函数函子(注意,是(r ->)
函子,不是(-> r)
函子),但是你从那里开始的推理有点草率,回想一下for functions,我们有fmap = (.)
,所以:...不 * 完全 * 的结果,你以为你会得到,我敢打赌!并希望在这个简化的形式,它更清楚地为什么这是不是真的明智:
y + 3
可能足够明智,但您试图将其作为3
的参数提供,而3
实际上并不是一个函数。