繁体   English   中英

是什么 <//> 在Haskell是什么意思?

[英]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) psreroute包中的(</>) :: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM