Haskell 无意义的
我有以下代码:Haskell 无意义的,haskell,pointfree,Haskell,Pointfree,我有以下代码: 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" 是否有可能使其无点(摆脱\m->)?有几种方法。在这种情况下:
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"
是否有可能使其无点(摆脱
\m->
)?有几种方法。在这种情况下:
putStrLn . fromMaybe "Error"
但这是一个相当特殊的情况。稍微不那么特别的是使用Maybe
cataophysism:
maybe (putStrLn "Error") putStrLn
Haskell中的许多类型都带有类似的亚同态,可以用来避免case
。但最常见的情况是使用称为lambdase
的特殊语言扩展,它允许您编写
\case
Just x -> putStrLn x
Nothing -> putStrLn "Error"
不同于fromaybe
(这对于Maybe
和这里使用的情况的规则性来说是特殊的)或亚同态(对于提供一个的类型来说是特殊的),这可以用于匿名化任何匹配lambda的模式