在 monad 中应用 fm vm 函数以将 fm monad 中的函数应用于 vm monad 中的值 [关闭]

问题描述 投票:0回答:0

我定义这个 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
functional-programming ocaml monads
© www.soinside.com 2019 - 2024. All rights reserved.