如何使用Haskell进行子域路由

如何使用Haskell进行子域路由,haskell,haskell-snap-framework,hakyll,Haskell,Haskell Snap Framework,Hakyll,使用使用snap的Hakyll,我开始在路由服务器上工作。根据他们教程中的以下代码,我可以看到路由,但我希望在他们自己的子域上有一些不同的应用程序,如oneapp.mysite.com。使用snap或任何其他Haskell服务器是否可以做到这一点 site :: Snap () site = ifTop (writeBS "hello world") <|> route [ ("foo", writeBS "bar") , ("echo/:echo

使用使用snap的Hakyll,我开始在路由服务器上工作。根据他们教程中的以下代码,我可以看到路由,但我希望在他们自己的子域上有一些不同的应用程序,如oneapp.mysite.com。使用snap或任何其他Haskell服务器是否可以做到这一点

site :: Snap ()
site =
    ifTop (writeBS "hello world") <|>
    route [ ("foo", writeBS "bar")
          , ("echo/:echoparam", echoHandler)
          ] <|>
    dir "static" (serveDirectory ".")
site::Snap()
场地=
ifTop(写为“你好世界”)
路线[(“foo”,writeBS“bar”)
,(“echo/:echoparam”,echoHandler)
] 
目录“static”(serveDirectory.)

我以前没有这样做过,但我会尝试这样做:

使用
wrapSite
函数有条件地使用子域的路由,您可以使用
fmap rqServerName getRequest


谢谢你们两位的建议,是我提出来的。我没有使用Snaplet,但我使用了
fmap rqServerName getRequest
if-then-else
语句。这是一段代码

skite :: Snap ()
skite = do
    req <- fmap rqServerName getRequest
    routes req
  where
    routes req =
        if (req == "www.site1.ro") then (site1) else pass <|>
        if (req == "site1.ro") then (site1) else pass <|>
        if (req == "www.site2.ro") then (writeBS req) else pass <|>
        if (req == "site2.ro") then (writeBS "Nowhere to be found") else pass <|>
        ifTop (writeBS req)
skite::Snap()
skite=do

req谢谢您的建议理论上似乎有道理,但我不知道如何使用Snaplet。您不必使用Snaplet来使用它。只需使用
rqServerName
getRequest
。此外,我也不知道它们必须是什么上下文。
vhosts
上反馈最多的东西是,它“只”通过testring
发送状态
,任何使用转发到路由的进一步实现都被
vhosts
接收
应用程序的必要性所取消,然后一切都被破坏。我知道这不是一个简单的例子,但它是最有表现力的例子。所以,请,如果你有一个关于如何在Snap中完成的提示,请写一行。或者我对哈斯克尔来说太新了。大概