什么是haskell中的<|>?

Fre*_*all 10 haskell haskell-snap-framework

我还在学习haskell并查看snap web框架.在他们的hello world例子中,有一个看起来很像的东西<|>

site :: Snap ()
site =
    ifTop (writeBS "hello world") <|>
    route [ ("foo", writeBS "bar")
          , ("echo/:echoparam", echoHandler)
          ] <|>
    dir "static" (serveDirectory ".")
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这是惊人的挑战,快照文档只是<|>用作名词.它是什么,它做了什么?

J. *_*son 9

它是包中Alternative模块Control.Applicative中类型类的方法base.

通常,这意味着您正在处理一种可能失败并继续的计算.如果同时xy被分类为m a其中m标签这种计算我们谈论然后

x <|> y :: m a
Run Code Online (Sandbox Code Playgroud)

是"尝试"的计算,x如果失败则"尝试" y.这种计算实例化Alternative.