小编Kev*_*ith的帖子

没有隐式视图可用

当我试图DBObject通过插入批量加载一个列表时,我得到了no implicit view available.

collection.insert(listObjects) // listObjects is a List[DBObject]

[error]Test.scala:139: No implicit view available from List[com.mongodb.casba
h.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?我怎么解决?

参考:

def insert [A] (docs: List[A])(implicit arg0: (A) ? DBObject) : WriteResult

scala implicit mongodb implicit-conversion casbah

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

State的`put`和`get`函数

I'n看国家单子putget:

ghci> :t get
get :: MonadState s m => m s

ghci> :t runState
runState :: State s a -> s -> (a, s)

ghci> runState get [1,2,3]
([1,2,3],[1,2,3])
Run Code Online (Sandbox Code Playgroud)

get's类型签名:MonadState s m => m s,有怎样[1,2,3]的类型MonadState s m?目前尚不清楚对我有什么的类型sm是.

另外,您能否详细说明如何使用put

ghci>:t put put :: MonadState sm => s - > m()

总的来说,似乎我不明白是什么MonadState s m.你能解释一下putget例子吗?

haskell

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

了解国家Monad

看着你学习哈斯克尔的定义State Monad:

instance Monad (State s) where  
    return x = State $ \s -> (x,s)  
    (State h) >>= f = State $ \s -> let (a, newState) = h s  
                                        (State g) = f a  
                                    in  g newState  
Run Code Online (Sandbox Code Playgroud)

我不明白右下角的类型h s和类型g newState.

你能解释一下他们的类型和发生的事情吗?

haskell

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

简单的`foldM`示例

foldM:

foldM :: Monad m => (a -> b -> m a) -> a -> [b] -> m a

我试图创建一个foldM简单地将列表的每个元素附加[1,2,3]到自身的示例.

基于我最初的(错误的)理解foldM,我期望[[1], [2], [3]]作为以下的输出:

ghci> let f = (\xs x -> [x] : [xs])
Run Code Online (Sandbox Code Playgroud)

但是我错了:

ghci> foldM f [] [1,2,3]
[[3],[2],[3],[1],[3],[2],[3],[]]
Run Code Online (Sandbox Code Playgroud)

请解释一下这个例子中发生了什么.

haskell

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

Haskell的Monoid Bool

当然数据类型并不精确,但这是(或多或少)Monoid Bool实现的方式?

import Data.Monoid

data Bool' = T | F deriving (Show)

instance Monoid (Bool') where
    mempty = T
    mappend T _ = T
    mappend _ T = T
    mappend _ _ = F 
Run Code Online (Sandbox Code Playgroud)

如果是/不是,什么是做推理BoolmappendORAND

haskell monoids

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

在应用方面实施Monoidal

Typeclassopedia提供以下练习:

按单位和(**)实现纯和(<*>),反之亦然.

这是MonoidalMyApplicative:

class Functor f => Monoidal f where
  u :: f ()                          -- using `u` rather than `unit` 
  dotdot :: f a -> f b -> f (a,b)    -- using instead of `(**)`

class Functor f => MyApplicative f where
  p     :: a -> f a                  -- using instead of `pure`
  apply :: f (a -> b) -> f a -> f b  -- using instead of `(<**>)`
Run Code Online (Sandbox Code Playgroud)

首先,让我展示Maybe类似的数据类型:

data Option …
Run Code Online (Sandbox Code Playgroud)

haskell

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

实现`Monad(( - >)e)`

Typeclassopedia提出了这个练习:

为(( - >)e)实现Monad实例.

这是MyMonad班级.

class (MyMonad m) where
    ret     :: a   -> m a
    flatMap :: m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

然后,我开始尝试实现Monad实例((->) e).

instance (MyMonad (-> e)) where
    ret x       = ...
    flatMap m f = ...
Run Code Online (Sandbox Code Playgroud)

但是,我没有直觉((->) e)意味着什么.

请帮助我理解它,并给我一个解决方案的暗示ret.

monads haskell

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

在Haskell中实现List#flatten

Scala提供了List#flatten一种从哪里List[Option[A]]开始List[A].

scala> val list = List(Some(10), None)
list: List[Option[Int]] = List(Some(10), None)

scala> list.flatten
res11: List[Int] = List(10)
Run Code Online (Sandbox Code Playgroud)

我试图在Haskell中实现它:

flatten :: [Maybe a] -> [a]
flatten xs = map g $ xs >>= f

f :: Maybe a -> [Maybe a]
f x = case x of Just _  -> [x]
                Nothing -> []

-- partial function!
g :: Maybe a -> a
g (Just x) = x
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢这g是一个部分的,即非全部的功能.

是否有完整的方法来编写这样的 …

haskell scala

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

状态Monad具有`put`功能

纵观国家单子的维基,我试图了解runStateput功能.

据我所知runState,它需要第一个参数State,它有一个"宇宙" s,和一个值,a.它需要宇宙的第二个参数.最后,它返回一个(a, s)地方a是新的价值,s是新的宇宙?

ghci> :t runState
runState :: State s a -> s -> (a, s)
Run Code Online (Sandbox Code Playgroud)

例:

ghci> let s = return "X" :: State Int String
ghci> runState s 100
("X",100)
Run Code Online (Sandbox Code Playgroud)

但是,我不明白put结果:

ghci> runState (put 5) 1
((),5)
Run Code Online (Sandbox Code Playgroud)

既然runState返回了(a, s),为什么是a类型()

我对上面的尝试解释没有信心.请纠正我,并回答我的问题put.

monads state haskell

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

总结"大"Nat的

鉴于:

scala> import shapeless.nat.
_0   _10   _12   _14   _16   _18   _2    _21   _3   _5   _7   _9      natOps            
_1   _11   _13   _15   _17   _19   _20   _22   _4   _6   _8   apply   toInt             

scala> import shapeless.ops.nat._
import shapeless.ops.nat._
Run Code Online (Sandbox Code Playgroud)

> 3分钟后,以下代码未编译/运行.为什么?

scala> Sum[_22, _22]
Run Code Online (Sandbox Code Playgroud)

另外,看看上面的REPL自动完成,_44甚至存在于无形状中?

scala shapeless

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