2011-09-24 101 views
3

我试图在哈斯克尔简单的URL路径和周围的警告不能得到:警告:模式匹配(ES)的字符串匹配时重叠

Warning: Pattern match(es) are overlapped 
      In a case alternative: "/" -> ... 
Ok, modules loaded: Main. 

的片段:

{-# LANGUAGE OverloadedStrings #-} 
import Network.Wai 
import Network.Wai.Handler.Warp (run) 
import Network.Wai.Middleware.Debug (debug) 
import Network.HTTP.Types (statusOK, status404) 
import qualified Data.ByteString as B 
import qualified Data.ByteString.Lazy as L 
import Data.ByteString.Char8 (unpack) 
import Data.ByteString.Lazy.Char8 (pack) 
import qualified Data.Text.Lazy as T 
import Control.Monad.IO.Class (liftIO, MonadIO) 

application req = do 
    case unpack $ rawPathInfo req of 
    "/items" -> itemsJSON 
    "/" -> indexPage 
    _ -> return $ responseLBS status404 [("Content-Type", "text/plain")] 
      "Not found" 

indexPage = do 
    page <- liftIO $ L.readFile "templates/index.html" 
    return $ responseLBS statusOK [("Content-Type", "text/html; charset=utf-8")] page 

itemsJSON = 
    return $ responseLBS statusOK 
    [("Content-Type", "application/json; charset=utf-8")] "hi" 

main = do 
    run 3000 $ debug $ application 

UPD: 取代片段与完整的计划,并

$ ghc -V 
The Glorious Glasgow Haskell Compilation System, version 6.12.1 
+0

您是否想要匹配确切的网址或前缀? – Gabe

+0

我无法重现警告。你确定这是违规片段吗? –

+0

@Sjoerd Visscher是的,当然。我更新了问题并将整个程序放在这里。 – Dfr

回答

10

这是一个bug,并在更新版本的GHC中修复。

+0

GHC-7.0.2中已修复,所以如果您还没有更新到GHC7,那么这是个好时机! – alternative