如果丢弃第一个或第二个参数,为什么需要这些函数(*>)或(<*)?

pha*_*age 2 haskell functional-programming applicative

函数的类型签名(*>)是这样的:

(*>) :: f a -> f b -> f b 
Run Code Online (Sandbox Code Playgroud)

序列操作,丢弃第一个参数的值.

有人可以解释为什么这有用吗?如果第一个参数被丢弃,似乎反直觉.

请举例说明.谢谢.

Die*_*Epp 8

让我们假设我们的应用函子已经是monad了.我们可以实现*><*喜欢这样:

x *> y = do
  x
  y

x <* y = do
  result <- x
  y
  return result
Run Code Online (Sandbox Code Playgroud)

所以你可以使用<**>编写简单的东西,比如:

askForNumber :: IO Int
askForNumber = putStr "Please enter a number: " *> readLn <* putStrLn "Thank you."
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,当"结果"被丢弃时,结果只是monadic动作或applicative functor动作的一部分.