-httpVersionP = do string "HTTP/"
- major <- many1 digit
- char '.'
- minor <- many1 digit
- return $ HttpVersion (read' major) (read' minor)
- where
- read' "1" = 1 -- この二つが
- read' "0" = 0 -- 壓倒的に頻出する
- read' s = read s
+httpVersionP = string "HTTP/"
+ >>
+ -- 頻出するので高速化
+ choice [ do string "1.0"
+ return $ HttpVersion 1 0
+ , do string "1.1"
+ return $ HttpVersion 1 1
+ -- 一般の場合
+ , do major <- many1 digit
+ char '.'
+ minor <- many1 digit
+ return $ HttpVersion (read major) (read minor)
+ ]