在阅读关于MonadPlus的 Haskell Wikibook 时,我发现以下函数基本上需要TabFocus
和Char
并返回String
如果这样的字符串与字符串头相等,或者Just (char,tail)
则相反:
Nothing
他们解释说char :: Char -> String -> Maybe (Char, String)
char c s = do
let (c':s') = s
if c == c' then Just (c, s') else Nothing
不会产生异常,因为它在let (c':s') = s
块中,当模式失败时会评估为do
,但是,这不是因为我试过的时候:
Nothing
所以我不得不把它重写为:
*Main> char 'a' ""
*** Exception: exercice2.hs:5:7-17: Irrefutable pattern failed for pattern (c' : s')
它按预期工作......为什么会发生在我身上?
答案 0 :(得分:7)
我认为维基是错误的。他们可能会因为绑定失败而感到困惑,因为Monad
函数a fail
提供了失败。因此,以下示例将使用Maybe
中的Nothing
函数,该函数返回char :: Char -> String -> Maybe (Char, String)
char c s = do
(c':s') <- return s
if c == c' then Just (c, s') else Nothing
:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.8.1'
classpath 'com.android.tools.build:gradle:2.2.1'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}