Saber2pr's Blog

Haskell与JS

在 JS 中其实已经使用了大量的 Functor 和 Monad。

  1. Functor 例如:

在 haskell 中

fmap (+1) [1,2,3] -- [2, 3, 4]

同样的在 JS 中有

Array.from([1, 2, 3], x => x + 1) // [2, 3, 4]
  1. Monad 例如:

在 haskell 中

Just 233 >>= \x -> Just $ x + 1 -- Just 234

同样的在 JS 中有

Promise.resolve(233).then(x => x + 1) // Promise&nbsp;{<resolved>: 234}
  1. Monad do-block 例如:

在 haskell 中

test :: Monad m => m Integer
test = pure 233

result :: Monad m => m Integer
result = do
  value <- test
  return $ value + 1

同样的在 JS 中有

const test = Promise.resolve(233)

const result = async () => {
  const value = await test
  return value + 1
}