2011-09-24 113 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