一样是上次那个模仿 Maybe 行为的 type:
-- Haskell 语法
data MightBe = NoThanks | Ok a deriving (Eq, Show)
那麽我们可以这样帮它实作 Functor 的 typeclass:
-- Haskell 语法
instance Functor (MightBe a) where
fmap _ NoThanks = NoThansk
fmap f (Ok a) = OK (f a)
-- 试试看
fmap (+1) $ NoThanks -- => NoThanks
fmap (+1) $ Ok 1 -- => Ok 2
能不能帮这些东西做出 Monoid 的实体呢?
data Double a a = Double a a
-- 希望能
fmap (+1) $ Double 1 1 -- => Double 2 2
fmap (++ "test") $ Double "a" "b" --> Double "atest" "btest"
模仿 Tuple。
data Pair a b = Pair a b
-- 希望能
fmap (+1) $ Double "a" 1 -- => Double "a" 2
fmap (++ "test") $ Double "foo" "a" -- => Double "foo" "atest"
注:能够做出这题,就可以知道为什麽 Tuple 类的 functor 都只能动到最後一个元素,因为「真的只能这样,不这样无法实作」。於是就能对 typeclass 的「实作即证明」感觉更有体会。个人意见是觉得,能够证出来才比较可以表示「我了解某 typeclass 是什麽了」。
data Temp = Celsius Float | Fahrenheit Float
deriving (Show)
instance Functor Temp where
fmap = ???
>>: RxJS 条件/布林类型 Operators (1) - isEmpty / defaultIfEmpty / find / finxIndex / every
ES6:fetch fetch():Fetch API 提供了一个能获取包含跨网路资源在的资源介面,...
人的科技文明发展始终来自於人性 奠基於各国的工业发展水准发达及科技发展的技术发达,在这两大的基石之上...
v-bind 属性绑定 将属性绑定於 HTML 中,可绑定Data、Class、Style v-bi...
接续昨天~ 今天我们要写入的部分是按钮。 一开始来到bind绑定port的按钮。 我们利用do ca...
有时候,嗯!没错~有时候吧?某些事情不是只属於你一个人的,而是旁边有人默默的发光照耀着你,就像黑夜里...