Я думаю, что здесь, вероятно, есть два запутанных момента.
Первый, наиболее очевидный, заключается в том, что sum
работает с Foldable
вещами, а не только со списками. Следовательно:
sum (Just 3) == 3
Второй — это экземпляр функтора, который вы используете. Поскольку Just
— это функция, а это второй аргумент fmap
, вы используете экземпляр fmap для чтения, который определен здесь (https://hackage.haskell.org/package/base-4.9.1.0/docs/src/GHC.Base.html#line-638) как просто (.)
.
Это выглядит странно, и, как будто это не должно проверять тип, потому что вы предоставляете три аргумента fmap, но на самом деле результатом (fmap sum Just) является функция:
Prelude> :t fmap sum Just
fmap sum Just :: Num b => b -> b
Если мы заменим fmap
на .
, все станет немного понятнее.
Prelude> (.) sum Just 3
3
Prelude> (sum . Just) 3
3
Что такое же, как
sum (Just 3)
person
Adam Wagner
schedule
10.04.2017
sum
происходит отData.Foldable
- person zerkms   schedule 10.04.2017