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 = ???
  <*> = ???

<<:  练功活动: 模拟案主!!

>>:  Day 29-ASP.NET & SQL资料库制作留言板(中)

【Day.27】React进阶 - 用useReducer定义state的更动原则

通常当我们要设定state时,都是透过setState(要指定的值)。但这样做有两个问题: 使用se...

[DAY3]建立容器(二)

昨天(DAY2)做的phpmyadmin出现问题登不进去,不过把错误讯息喂google爬了一圈并没有...

ASUSTOR NAS网路储存服务器装置推荐 开箱安装

ASUSTOR NAS网路储存服务器装置推荐 开箱安装,最近我们常接到许多客人在问说是要使用NAS还...

绘图 - 即时五笔

以下内容,都是 shioaji 的官网文件的内容,只是加了一些我自己的理解,感谢永丰提供这麽完整的 ...

[Day8] 关於人脸侦测(Face Detection)的二三事

本篇文没有引言,不罗嗦。 本文开始 人脸侦测是物体侦测(Object Detection)的一种;...