我有这个代码:
import Control.Lens
import Control.Monad
import Control.Arrow
import Text.Read
... IO (Maybe String) ...
>>= \m -> case m of
Just x -> putStrLn x
Nothing -> putStrLn "Error"
Run Code Online (Sandbox Code Playgroud)
是否有可能使它无点(摆脱\m ->)?
有几种方法.在这种特殊情况下:
putStrLn . fromMaybe "Error"
Run Code Online (Sandbox Code Playgroud)
但这是一个非常特殊的情况.稍微不那么特别的是使用Maybecatamorphism:
maybe (putStrLn "Error") putStrLn
Run Code Online (Sandbox Code Playgroud)
Haskell中的许多类型具有类似的可以用来避免的类似物case.但最常见的情况是使用称为的特殊语言扩展LambdaCase,它允许您编写
\case
Just x -> putStrLn x
Nothing -> putStrLn "Error"
Run Code Online (Sandbox Code Playgroud)
与fromMaybe(Maybe这里使用的案例的特殊性和规则性)或者catamorphism(对于提供一个的类型特殊)不同,这可以用于匿名化任何模式匹配的lambda.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |