Haskell简化技术和monad

pig*_*ack 2 haskell

如何减少/简化此代码(或通常,具有多个输入的代码)?

do
  sex    <- askSex
  name   <- askName
  sayHello sex name
Run Code Online (Sandbox Code Playgroud)

在这种情况下已经非常短,但当它达到多个输入时,它看起来很乱.有什么方法可以做以下事情:

sayHello askSex askName
Run Code Online (Sandbox Code Playgroud)

dav*_*420 5

如果你

import Control.Applicative  -- for <$> and <*>
import Control.Monad        -- for join
Run Code Online (Sandbox Code Playgroud)

你可以写

join $ sayHello <$> askSex <*> askName
Run Code Online (Sandbox Code Playgroud)

对于您的示例,您只获取两个参数,这不是一个大赢家.但是对于更多的参数,它可以使代码更清晰.

join $ doSomething <$> getFirst <*> getSecond <*> getThird <*> getForth
Run Code Online (Sandbox Code Playgroud)