Haskell do表示法中一元函数与纯函数的混合
我在do符号中混合纯函数和一元函数时遇到问题。我觉得我错过了一些明显的东西 例如,假设我得到了这些函数Haskell do表示法中一元函数与纯函数的混合,haskell,coding-style,do-notation,Haskell,Coding Style,Do Notation,我在do符号中混合纯函数和一元函数时遇到问题。我觉得我错过了一些明显的东西 例如,假设我得到了这些函数 fa :: a -> IO b fb :: b -> c fc :: c -> IO d z :: a -> IO c z a = do x <- fa a y <- fb x z <- fc y return z fa::a->IO b fb::b->c fc::c->IO d z::a->I
fa :: a -> IO b
fb :: b -> c
fc :: c -> IO d
z :: a -> IO c
z a = do x <- fa a
y <- fb x
z <- fc y
return z
fa::a->IO b
fb::b->c
fc::c->IO d
z::a->IO c
z a=do x对于非单体绑定使用let
:
z :: a -> IO c
z a = do x <- fa a
let y = fb x
z <- fc y
return (z)
z::a->IO c
z a=do x可能你能做的最小的改变是:
z a = do x <- fa a
let y = fb x
z <- fc y
return z
尽管您可以根据您的具体情况选择合理/可读/美观的转换。我会这样写这个特定示例:
z a = do x <- fa a
fc $ fb x
让y=fb x
有什么问题?在返回(z)
中,以及在fa a
中,围绕单个变量的参数总是多余的。在Haskell中,通常认为只有在必要时才使用括号才是好的风格(当然,除非是这样)@你是对的!感谢您的选择,您个人将如何决定如何编写它?
z = fa >=> fc . fb
z a = do x <- fa a
fc $ fb x
z a = fa a >>= fc . fb