我定义这个 Option monad 如下:
type 'a option = None | Some of 'a
module OptionMonad =
struct
type 'a t = 'a option
let return v = Some v
(* let bind m f = match m with*)
(* | None -> None*)
(* | Some v -> f v*)
let map f o =
match o with
| None -> None
| Some v -> Some (f v)
let rec concat o =
match o with
| None -> None
| Some v -> v
let bind m f = concat (map f m)
let (>>=) = bind
我想在带有签名的monad中定义一个函数
apply
:
(’a->’b) t -> ’a t -> ’b t
.
这个
apply fm vm
将 monad fm
中的函数应用到 monad vm
中的值,并将此应用程序的结果放回 monad(在本例中为选项)
你会怎么做?
我的尝试是这样的:
let apply fm vm = map fm vm