monadic值的情况下
有没有办法执行一个monad中存储的值的情况下,而不必将名称绑定到它?monadic值的情况下
即不是这样:
c <- getChar
case c of
...
有没有办法做到这一点:
mcase getChar of
...
或者,这将是很好,如果case语句可以部分地施加这样:
case of
...
将被拆除为:
\a -> case a of
...
所以,你可以这样做:
getChar >>= case of
...
没有,真的没有,但你可以的情况下移动到另一个功能,并将其应用到一元行动的结果。
f x = case x of ...
main = do
f <$> getChar
Alternativly,以下是可能的:
getChar >>= \x -> case x of ...
是的,但是**的值是**分配了名称'x'。当我将非单代码转换为单代码并且必须对病例语句进行手术时,我遇到了这个问题。 – pat 2011-03-22 17:48:50
然后用我的第一种方法。 – jmg 2011-03-22 17:52:27
我认为第一个案例是最好的。然后,您可以将case语句放在一起,然后在函数定义中进行模式匹配。 – HaskellElephant 2011-03-22 17:56:34
您可能已经意识到这一点,但haskell-cafe有一个[讨论](http://thread.gmane.org/gmane.comp.lang.haskell.cafe/81366/)关于这个确切的功能。 GHC方面[似乎没有问题](http://article.gmane.org/gmane.comp.lang.haskell.cafe/81533),所以我们可能迟早会看到这一点。 – 2011-03-23 10:09:43