所以我有這行代碼: [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)
我在混合符號裏面使用純函數和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