我在混合符号里面使用纯函数和monadic函数时遇到了困难。我有这种感觉,我失去了一些明显的东西。 例如,说我有这些功能 fa :: a -> IO b
fb :: b -> c
fc :: c -> IO d
z :: a -> IO c
z a = do x <- fa a
y <- fb x
z <- fc y
return z
这并不是因为
我尝试在第8章中运行关于Graham Hutton的“Programming in Haskell”中的函数解析器的片段,这两个片段都在ghci和frege-repl中。 我无法使用do语法对语法分析器进行排序。 我有以下弗雷格(Haskell的版本,不同之处仅简单item定义中不打包和解包String和Char,是一样的,在书)定义: module Parser where
type Pars
所以我有这行代码: [Nothing] >>= \(Just x) -> [x]
当然这给了异常,因为模式不匹配没什么。 在另一方面,该代码给出了不同的结果,[]: do
Just x <- [Nothing]
return x
在我看来,他们应该产生相同的结果,因为做块应该被脱到使用(>> =)并返回。但事实并非如此,使得符号是一个特征而不是语法糖。 我知道单子类型类
在阅读的Haskell维基教科书约MonadPlus,我发现了以下功能基本上取Char和String并返回Just (char,tail)如果这种炭等于所述线接头,或Nothing否则: char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Ju
我试图从使用符号的函数返回一个Maybe值,但我似乎无法让它工作。这个函数的字符串(“文件名”),并在搜索路径... findIn :: String -> Path -> Maybe Path
findIn search start = do
file <- ls start
if ((filename file) == search)
then Just fi
我有这种类型的工作,基本上是Kleisli箭头: {-# language DeriveFunctor #-}
data Plan m i o = Plan (i -> m o) deriving Functor
instance (Monad m) => Applicative (Plan m i) where
pure x = Plan (\_ -> pure x)