monads

    -4热度

    1回答

    为什么我能写这样的事: main :: IO() main = getLine >>= putStrLn 由于getLine :: IO String和putStrLn :: String -> IO String它似乎是这一行动的整体类型应该是IO String。为什么这样编译而不是给出类型错误?我能想出的唯一原因是在编译时>> return()被添加到main的值的末尾。那么这里发生了什

    1热度

    1回答

    刚刚被介绍给哈斯克尔的单子,并与>>碰到了一些障碍。 >>=对我来说很有意义,因为我可以得到下面的出前奏曲: Prelude> Just 1 >>= (\ x -> Just (x+1)) Just 2 我的理解是,>>是一样的绑定,但仅用于当函数是关于恒定的参数。但是,当我尝试这样做,在前奏: Prelude> Just 1 >> (\_ -> Just 10) <interactiv

    9热度

    2回答

    我在阅读Purescript通过示例并介绍了读者单元的部分。示例如下: createUser :: Reader Permissions (Maybe User) createUser = do permissions <- ask if hasPermission "admin" permissions then map Just newUser els

    3热度

    1回答

    考虑此程序: module test import Effects import Effect.StdIO (>>==) : Maybe a -> Lazy (a -> Maybe b) -> Maybe b (>>==) Nothing (Delay map) = Nothing (>>==) (Just x) (Delay map) = map x nothing : Str

    3热度

    1回答

    使用作家单子#尾递归 let inline bind ma fm = let (Writer (a, log1)) = ma let mb = fm a let (Writer (b, log2)) = mb let sum = (^w : (static member add : ^w * ^w -> ^w) (log1, log2)) Writ

    1热度

    1回答

    问题:我有以下Future[Option[T]] monad,我想申请scalaz Monad Transformer OptionT它。因为我只对可选结果感兴趣。 问题:是否有可能以从Future[Option[T]]保留语义Option[Future[T]]?

    0热度

    1回答

    我正在创建一个将读取二进制文件的Conduit。东西可能会出错,所以我需要一个monad来处理一些错误;现在Maybe已经足够了。 我想使用sourceFile,它要求管道monad是MonadResource,这是问题的关键。 我从the docs看到,例如, MaybeT m有一个实例,但它需要m已经是MonadResource;事实上,所有情况都是如此。由于我的理解有限,这听起来像鸡与鸡蛋,

    0热度

    1回答

    如果我有,理解与列表类似 def getList: List[A] def doSomeStuff(a: A): List[B] for { a <- getList x <- doSomeStuff(a) } yield x 一个Scala和我通过它一步用的IntelliJ调试器,调试器是足够聪明,不踏进List类的内部地图/ flatMap实现。我可以检查get

    2热度

    3回答

    我知道我可以使用函数单子来实现类似下面的一个结构(在这里我重复使用多次调用的参数不明确引用它)之前执行转换到输入: compute_v0 :: String -> String compute_v0 = do x <- length -- (using the argument implicitly here) top <- head -- (and here) r

    0热度

    1回答

    我遇到cats/monads /理解问题。 请考虑下面的代码片段: import cats._ import cats.implicits._ final case class My[T]() implicit val monadMy: Monad[My] = new Monad[My] { ... } // this compiles def test11[A, B](m: My[