monads

    3热度

    1回答

    我一直在尝试掌握IO monad一段时间,它是有道理的。如果我没有弄错,我们的目标是将副作用和实际执行的描述分开。正如在下面的例子中,Scala有一种方法来获得一个不引人注意的环境变量。出现了两个问题。 问题1:这是一个指涉TRANSPARANT 问题2:如何正确(单位/财产依据)测试呢?检查相等是不可能的,因为它会检查内存引用,并且不可能检查内部函数,因为如果我没有弄错,函数比较是不可能的。但是

    2热度

    1回答

    我试图安装一个应用程序Termite - Util但我在与线得到这个错误14 newtype CE m a = CE {unCE :: m a} deriving (Monad) 错误说: ContextError.hs:14:45 : 没有适用于(适用(CE m)) 由数据类型声明的“派生”子句产生 可能的修正: 使用独立的“派生实例”声明 因此您可以sp ecify自己的实例上下文 当导出

    7热度

    1回答

    我试图总结我的周围连拍和callCC头: s0 = (flip runContT) return $ do (k, n) <- callCC $ \k -> let f x = k (f, x) in return (f, 0) lift $ print n if n < 3 then k (n+1) >> return()

    1热度

    1回答

    在Haskell中,如何去写入任意大量的文件? 举个例子,假设我想把a到z这两个字母放在一个文件名里面,这个文件的内容是字母。最初的尝试是做到以下几点: main :: IO() main = do let letter = map (:"") ['a'..'z'] zipWith writeFile letter letter 这将产生以下错误: Couldn't

    2热度

    1回答

    我以前用过Kleisli,当你计算传递依赖到它的计算时,monad会返回我需要的值。 现在我正在使用Reader,我发现当我运行该程序时,评估结果将返回Id。 为什么? 此外,探索Id我遇到的init函数展开计算值的不同选项。使用“combinator”是否好?我需要从Reader唯一的东西是没有任何包装的产值。 由于

    1热度

    1回答

    使用optparse-applicative,我想要一个可选参数,该参数应该是文件的路径,或者未指定时,stdin。这里明显的选择是使这个参数类型为IO Handle,并且在使用openFile时传递参数。这是我目前有: module Main where import Data.Semigroup ((<>)) import Options.Applicative import Syst

    6热度

    1回答

    我正在做一个项目,需要我写一个小型的解释器。这些指令具有简单的树形结构,其中一个命令具有暂停执行的效果。所以在下面的例子中,“baz”从不打印。 import Control.Monad.Cont data Instruction = Print String | Halt | Block [Instruction] deriving (Eq, Show) instruction

    -2热度

    1回答

    我对单子状态下获取和修改的定义感到困惑。 Somewhere说: 得到: “获取的状态的特定的成分,使用供给的投影函数”。 修改:将旧状态映射到状态monad内的新状态。旧国家被抛弃。 这意味着我们可以使用修改直接为状态组件分配一个值,如here。 但somewhere别人说,我们可以提供给状态的功能和使用修改,并得到结果。 这似乎两个作品,但它不知道哪一个工作在哪里!

    2热度

    1回答

    我想从一个文本文件中读取一个矩阵[[Int]](这个矩阵是 一个project euler's problem给出)看不见的,所以我有以下的代码 parseInt :: String -> [Int] parseInt [] = [] parseInt (x : xs) = [(ord x) - (ord '0')] ++ (parseInt xs) main = do str

    8热度

    3回答

    我正在尝试创建一个验证输入String -> Maybe Int的函数。我检查输入字符串是否是一个数字,然后检查该数字是否在一个范围内。到目前为止,我有 validateNumber :: String -> Maybe Int validateNumber n = go $ (readMaybe::String -> Maybe Int) n where go (Just