相关疑难解决方法(0)

究竟是什么让Option成为Scala中的monad?

我知道monad是什么以及如何使用它们.我不明白的是,是什么Option一个单子?

在Haskell中,monad Maybe是一个monad,因为它是从Monad类中实例化的(它具有至少2个必要的函数return,bind并且实现了类Monad,实际上是monad).

但是在Scala我们有这个:

sealed abstract class Option[+A] extends Product with Serializable { ... }
trait Product extends Any with Equals { ... }
Run Code Online (Sandbox Code Playgroud)

没有任何与monad相关的东西.

如果我在Scala中创建自己的类,默认情况下它是monad吗?为什么不?

monads haskell functional-programming scala maybe

36
推荐指数
3
解决办法
7823
查看次数

将Haskell monad直接翻译成Scala

试图学习如何编写Scala中的monad,遇到了一些麻烦

鉴于快速代码示例

import Control.Monad

newtype LJ a = LJ { session :: a }

instance Monad LJ where
  return s = LJ s
  (>>=) m f = f ( session m )

instance Functor LJ where
  fmap f m = LJ . f $ session m

type SimpleLJ = LJ String

auth :: String -> String -> SimpleLJ
auth = undefined

readFeed :: String -> SimpleLJ
readFeed = undefined

closeFeed :: String -> SimpleLJ
closeFeed = undefined

proceed = auth …
Run Code Online (Sandbox Code Playgroud)

monads haskell scala

4
推荐指数
1
解决办法
918
查看次数

没有Monad实例的"Data.Map",但是Scala的地图?

使用:i Map,我没有看到Monad它的实例.

ghci> import Data.Map
ghci> :i Map
type role Map nominal representational
data Map k a
  = containers-0.5.5.1:Data.Map.Base.Bin {-# UNPACK #-} !containers-0.5.5.1:Data.Map.Base.Size
                                         !k
                                         a
                                         !(Map k a)
                                         !(Map k a)
  | containers-0.5.5.1:Data.Map.Base.Tip
    -- Defined in ‘containers-0.5.5.1:Data.Map.Base’
instance (Eq k, Eq a) => Eq (Map k a)
  -- Defined in ‘containers-0.5.5.1:Data.Map.Base’
instance Functor (Map k)
  -- Defined in ‘containers-0.5.5.1:Data.Map.Base’
instance (Ord k, Ord v) => Ord (Map k v)
  -- Defined in ‘containers-0.5.5.1:Data.Map.Base’
instance (Ord k, …
Run Code Online (Sandbox Code Playgroud)

haskell scala

3
推荐指数
1
解决办法
276
查看次数

标签 统计

haskell ×3

scala ×3

monads ×2

functional-programming ×1

maybe ×1