标签: monads

为什么在即将推出的.NET 4.0中没有类似IMonad <T>的东西

...与所有那些新的(如果我们计算IEnumerable不是那么新)与monad相关的东西?

interface IMonad<T>
{
 SelectMany/Bind();
 Return/Unit();
}
Run Code Online (Sandbox Code Playgroud)

这将允许编写以任何monadic类型操作的函数.或者它不是那么重要?

.net c# monads

29
推荐指数
1
解决办法
4704
查看次数

为什么在列表列表中应用`sequence`会导致其笛卡尔积的计算?

我的问题是关于sequence功能Prelude,其签名如下:

sequence :: Monad m => [m a] -> m [a]
Run Code Online (Sandbox Code Playgroud)

我理解这个函数是如何工作的ListMaybe秒.例如,将sequence[Just 3, Just 9]给人Just [3, 9].

我注意到,应用sequenceListLists给出了笛卡尔乘积.有人可以帮我理解这是怎么回事?

monads haskell functional-programming cartesian-product

29
推荐指数
3
解决办法
9426
查看次数

F#:有没有办法扩展monad关键字列表?

在F#monad中,如果你说let!,编译器会将其转换为Bind你在monad构建器上定义的成员.

现在我看到有一个Query monads,如MSDN所示,你可以说:

query {
    for student in db.Student do
    select student
    count
}
Run Code Online (Sandbox Code Playgroud)

selectcount,例如,将被翻译到QueryBuilder成员Linq.QueryBuilder.SelectLinq.QueryBuilder.Count.

我的问题是,关键字映射到成员是否已硬连接到F#编译器,还是可扩展?例如,我可以这样说:

FooMonadBuilder() {
    bar
}
Run Code Online (Sandbox Code Playgroud)

并以某种方式告诉F#编译器bar映射到一个FooMonadBuilder.Bar()方法?

monads f# dynamic-keyword computation-expression

29
推荐指数
1
解决办法
2424
查看次数

dropcore.js中的链函数是否会创建一个monad?

chain文件你会发现:

调用chain包装对象将导致所有将来的方法调用也返回包装对象.完成计算后,使用value检索最终值.

那么chain函数是否创建了一个monad?

monads haskell functional-programming underscore.js comonad

29
推荐指数
1
解决办法
2363
查看次数

Biapplicative和Bimonad?

Haskell Data.Bifunctor基本上是:

class Bifunctor f where
  bimap :: (a -> c) -> (b -> d) -> f a b -> f c d 
Run Code Online (Sandbox Code Playgroud)

我也能找到一个Biapply.我的问题是,为什么不存在完整的双层次结构(层次结构?),如:

class Bifunctor f => Biapplicative f where
  bipure :: a -> b -> f a b
  biap :: f (a -> b) (c -> d) -> f a c -> f b d 

class Biapplicative m => Bimonad m where
  bibind :: m a b -> (a -> b -> m c d) …
Run Code Online (Sandbox Code Playgroud)

monads haskell

29
推荐指数
1
解决办法
2503
查看次数

Monad用非编程术语表示

可能重复:
什么是monad?

您如何用非编程术语描述monad?是否有一些概念/事物在编程之外(在所有编程之外,而不仅仅是FP),可以说是以一种重要的方式行事或像monad一样?

monads haskell functional-programming

28
推荐指数
6
解决办法
5398
查看次数

将状态与IO操作相结合

假设我有一个状态monad,例如:

data Registers = Reg {...}

data ST = ST {registers :: Registers,
              memory    :: Array Int Int}

newtype Op a = Op {runOp :: ST -> (ST, a)}

instance Monad Op where
 return a    = Op $ \st -> (st, a)
 (>>=) stf f = Op $ \st -> let (st1, a1) = runOp stf st
                               (st2, a2) = runOp (f a1) st1
                            in (st2, a2)
Run Code Online (Sandbox Code Playgroud)

功能如

getState :: (ST -> a) -> Op a
getState g = Op …
Run Code Online (Sandbox Code Playgroud)

monads state haskell

28
推荐指数
2
解决办法
6214
查看次数

Monad变形金刚图书馆 - 哪一个使用?

Hackage上有许多不同的monad变换器库.有些人似乎比其他人更受关注.仅举几例:mtl(由于某种原因取决于变压器的当前版本),变压器,monadLib,monads-tf,mtlx,contstuff.

应该首选哪一个?为什么?它们的独特之处是什么?性能怎么样?

monads haskell functional-programming monad-transformers

28
推荐指数
1
解决办法
3326
查看次数

是否可以在Scala中实现liftM2?

在Haskell中,liftM2可以定义为:

liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 f m1 m2 = do
  x1 <- m1
  x2 <- m2
  return $ f x1 x2
Run Code Online (Sandbox Code Playgroud)

我想把它翻译成Scala.我的第一次尝试如下:

def liftM2[T1, T2, R, M[_]](f: (T1, T2) => R)(ma: M[T1], mb: M[T2]) : M[R] = for {
  a <- ma
  b <- mb
} yield f(a, b)
Run Code Online (Sandbox Code Playgroud)

我认为这是最明显的可行方式:"flat flatMap不是类型参数M [T1]的成员".是的,我没有说明M[_]是某种单子.所以接下来我尝试的是定义一些结构类型,如:

type Monad[A] = {
  def flatMap[B](f: (A) => …
Run Code Online (Sandbox Code Playgroud)

monads haskell scala typeclass lifting

28
推荐指数
1
解决办法
1311
查看次数

如何在Haskell中解析IO String?

我遇到了Haskell的问题.我的文本文件看起来像这样:

5.
7. 
[(1,2,3),(4,5,6),(7,8,9),(10,11,12)].
Run Code Online (Sandbox Code Playgroud)

我不知道如何获得前两个数字(上面的2和7)和最后一行的列表.每行末尾有点.

我试图构建一个解析器,但是名为'readFile'的函数返回Monad,称为IO String.我不知道如何从这种类型的字符串中获取信息.

我更喜欢在一系列字符上工作.也许有一个函数可以从'IO String'转换为[Char]?

string io monads parsing haskell

28
推荐指数
4
解决办法
2万
查看次数