sas*_*nin 9 syntax haskell syntactic-sugar
这是关于Haskell中的语法糖.一个简单的Haskell程序:
main = do
args <- getArgs
let first = head args
print first
Run Code Online (Sandbox Code Playgroud)
我在第一行(args <- getArgs)中使用绑定,在第二行()中使用纯赋值let first = ....有可能将它们合并成一个可读的单行程序吗?
我明白我可以重写绑定"脱糖":
main = do
first <- getArgs >>= ( return . head )
print first
Run Code Online (Sandbox Code Playgroud)
但是有没有更好的方法,没有用(>> =)弄乱线路并返回?
Nor*_*sey 16
liftM并且head都很好,但我们不要忘记模式匹配:
main = do { arg:_ <- getArgs; print arg }
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢布局
main = do
arg : _ <- getArgs
print arg
Run Code Online (Sandbox Code Playgroud)
如果可能的话,最喜欢Haskellers模式匹配了head和tail.
这个怎么样?
import Control.Monad
main = do
first <- liftM head getArgs
print first
Run Code Online (Sandbox Code Playgroud)
也可以使用这样的ap函数(带类型Monad m => m (a -> b) -> m a -> m b):
import System
import Control.Monad
main :: IO ()
main = do line <- return head `ap` getArgs
putStrLn line
Run Code Online (Sandbox Code Playgroud)
这有一个简单的优点,如果你的函数需要几个参数,你可以ap在它们之间使用liftM2,你不需要使用liftM3等等.对于f::a -> b -> c -> d你写的函数
return f `ap` arg1 `ap` arg2 `ap` arg3
Run Code Online (Sandbox Code Playgroud)