Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 无意义的_Haskell_Pointfree - Fatal编程技术网

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的模式