iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 29
1
Software Development

mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉系列 第 32

mostly:functional 第二十八章的試煉: Applicative 的證明

小測驗

  1. 我們在上一章的最開始,示範了元組上的 <*>,其中有一條是這樣寫的:
pure (+8) <*> ("hello", 10)    -- => ("hello", 18)

<*> 的左邊的那個看起來不像個元組啊?可以猜測一下那邊的內容是什麼嗎?如果你需要提示的話,可以看一下元組上的 Applicative 的前提。

  1. 而在上一章的結尾,函式的 applicative 裡,我們這樣示範了:
-- Haskell 
f x, y = (x + 2, y * 3)
g = (+ 10)

h = f <*> g  -- ap!

h 1 -- => (3,33)

如果我們想要把 h 拿到的那個 1,原封不動的傳給 tuple 後面那個 y * 3,讓最後的結果是 (3, 3),那我們要改動哪一行呢?改成什麼?

實作

data Double a a = Double a a

-- 希望能
(+) <$> (Double 1 1) <*> (Double 2 2) -- => Double 3 3
  1. 模仿 Tuple。
data Pair a b = Pair a b

-- 希望能
(+) <$> Double "a" 1 <*> Double "b" 2 -- => Double "ab" 23
  1. 能幫我們之前做出來的溫度,做出 Applicative 的實例嗎?如果不行的話,為什麼?或是會有怎樣的限制?
data Temp = Celsius Float | Fahrenheit Float
  deriving (Show)

instance Applicative Temp where
  pure = ???
  <*> = ???

上一篇
mostly:functional 第二十八章:Applicative 的實體
下一篇
mostly:functional 第二十九章:Monad 的法則
系列文
mostly:functional 從零開始的異世界程式觀 --- 函數式程式設計的試煉35

尚未有邦友留言

立即登入留言