[英]What does <//> mean in Haskell?
从使用Spock的简单服务器中的以下代码中:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Web.Spock
import Web.Spock.Config
import Data.Time.Clock
import Control.Concurrent
import Network.HTTP.Types.Status
import Network.HTTP.Types.URI
import Control.Monad.Trans
import Control.Concurrent.STM
import qualified Data.Text as T
app :: MyApp ()
app =
do get root $ redirect' "https://google.no"
-- Store params
get ("oauth2" <//> var) $ \path' ->
do ...
大部分进口与该问题无关。
这是(<//>) :: Path as Open -> Path bs ps -> Path (Append as bs) ps
function 。 如文档所述:
结合两个路径组件
在源代码[GitHub]中 ,我们看到它实现为:
(<//>) :: Path as 'Open -> Path bs ps -> Path (Append as bs) ps (<//>) = (</>)
此(</>)
函数源自(</>) :: Path as Open -> Path bs ps -> Path (Append as bs) ps
重reroute
包中的(</>) :: Path as Open -> Path bs ps -> Path (Append as bs) ps
。 它实现为[GitHub] :
(</>) :: Path as 'Open -> Path bs ps2 -> Path (Append as bs) ps2 (</>) Empty xs = xs (</>) (StaticCons pathPiece xs) ys = StaticCons pathPiece (xs </> ys) (</>) (VarCons xs) ys = VarCons (xs </> ys)
因此,它基本上将一些路径片段附加在一起。 您可以在此处将其视为某种形式的链接列表。 字符串文字(例如"oauth2"
)可以通过OverloadedStrings
转换为Path
因为它是IsString
类[GitHub]的实例 :
instance (a ~ '[], pathState ~ 'Open) => IsString (Path a pathState) where fromString = static
每当路径的一部分时,它都会生成一个StaticCons
(好吧,因为"oauth2"
不包含任何斜杠,所以只有一个块):
static :: String -> Path '[] 'Open static s = let pieces = filter (not . T.null) $ T.splitOn "/" $ T.pack s in foldr StaticCons Empty pieces
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.