美文网首页
Monad(函子)

Monad(函子)

作者: 湘兰沅芷 | 来源:发表于2021-09-26 13:14 被阅读0次

Monad函子是可以变扁的Pointed函子,IO(IO(x))
一个汉子如果具有join和of两个方法并遵守一些定律就是一个Monad

当一个函数返回一个函子使用Monad,解决函子嵌套的问题
合并一个函数并且这个函数返回一个值使用map
合并一个函数,函数返回一个函子,flatMap

const fs = require('fs')
const fp = require('lodash/fp')

class IO {
  static of (value) {
    return new IO(function() {
      return value
    })
  }

  constructor (fn) {
    this._value = fn
  }

  map(fn) {
    return new IO(fp.flowRight(fn, this._value)) // 组合函数形成一个新的函子
  }

  join() {
    return this._value()
  }

  flatMap(fn) { // 同时调用map和join
    return this.map(fn).join()
  }
}

let readFile = function (filename) {
  return new IO(function() {
    return fs.readFileSync(filename, 'utf-8')
  })
}

let print = function(x) {
  return new IO(function () {
    console.log(x)
    return x
  })
}

let r = readFile('package.json').flatMap(print).join()
let r = readFile('package.json').map(x => x.toUpperCase()).flatMap(print).join()
let r = readFile('package.json').map(fp.toUpper).flatMap(print).join()
console.log(r)

相关文章

  • Monad(函子)

    Monad函子是可以变扁的Pointed函子,IO(IO(x))一个汉子如果具有join和of两个方法并遵守一些定...

  • Monad 定律

    monad 是支持>>=操作的 applicative 函子,>>=读作绑定,它的类型是: 即取一个 monad ...

  • Monad

    Monad不就是个自函子范畴上的幺半群,这有什么难理解的(A monad is just a monoid in ...

  • 函子 monad的使用

    什么是函子 Functor 是一个特殊容器,通过普通对象来实现,该对象具有map方法,map方法可以运行一个函数对...

  • 可应用函子和可遍历函子

    本章将学习相关的抽象,可应用函子,虽然没有Monad强大,但是更普遍(因此通用)。在寻找可应用函子的过程中,也展示...

  • 一个Monad的不严谨介绍

    一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,这有什么难以理解的?* 之前了解了下Monad,...

  • Kotlin(十七)函数式编程<3>

    函数式通用结构设计 介绍一个非常让人恶心的专业术语,Monad。(单子)Monad 无非就是个自函子范畴上的幺半群...

  • Swift 函数式

    函子、Functor、map 接受一个「未封装的值」,返回一个「未封装的值」。 单子、Monad、flatMap...

  • 【函数式】Monads模式初探——Monad概念

    单子 单子(Monad)是一种将函子组合应用的方法。在计算机科学里,单子经常用来代表计算(computation)...

  • Monad不过是自函子上的幺半群罢了

    Monad不过是自函子上的幺半群罢了。学了Haskell的同学,凡是看不懂这句话的,都是大学离散数学课没学好的。当...

网友评论

      本文标题:Monad(函子)

      本文链接:https://www.haomeiwen.com/subject/ubqgiltx.html