javascript 也许Monad在Javascript中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 也许Monad在Javascript中相关的知识,希望对你有一定的参考价值。

// Naive definition

const Some = (v) => ({
  val: v,
  map (f) {
    return Some(f(this.val))
  },
  chain (f) {
    return f(this.val)
  }
})

const None = () => ({
  map (f) {
    return this
  },
  chain (f) {
    return this
  }
})

// maybeProp :: (String, {a}) -> Option a
const maybeProp = (key, obj) => typeof obj[key] === 'undefined' ? None() : Some(obj[key]);


// getItem :: Cart -> Option CartItem
const getItem = (cart) => maybeProp('item', cart)

// getPrice :: Item -> Option Number
const getPrice = (item) => maybeProp('price', item)

// getNestedPrice :: cart -> Option a
const getNestedPrice = (cart) => getItem(cart).chain(getPrice)

getNestedPrice({}) // None()
getNestedPrice({item: {foo: 1}}) // None()
getNestedPrice({item: {price: 9.99}}) // Some(9.99)

以上是关于javascript 也许Monad在Javascript中的主要内容,如果未能解决你的问题,请参考以下文章

从 Haskell 到 JavaScript 的翻译,我读过的最好的 Monad 介绍的部分内容

使用JavaScript调用手机平台上的原生API

如何为continuation monad实现stack-safe chainRec操作符?

如何正确使用 Javascript 来定位 Shiny 中的 gt 表行元素

javasc面向对象编程

Monad的重点