假設我有兩種類型IntResult和StringResult: import cats._
import cats.data._
import cats.implicits._
scala> case class MyError(msg: String)
defined class MyError
scala> type Result[A] = Either[NonEmptyList
我們知道fmap是fmap :: Functor f => (a -> b) -> f a -> f b和sum是sum :: (Num a, Foldable t) => t a -> a,但下面的代碼混淆了我。 > :t (fmap sum Just)
(fmap sum Just) :: Num b => b -> b
> fmap sum Just 3
3
爲什麼?
我已閱讀下列問題: Template functors vs functions C++ Functors - and their uses C++ function template partial specialization? 我明白C++ functors是良好的。但我不能推斷,如果將執行以下操作會發生什麼: template <typename T, unsigned int state
的確如此: λ :i Applicative
class Functor f => Applicative (f :: * -> *) where
同時: fmap f x = pure f <*> x
- 由Applicative規律,我們可以從pure & <*>定義fmap。 我不明白爲什麼我要我要一個Applicative如果,真的,fmap可以自動在pure和<*>規定設立每次