はここのコードです:現在のコード、runParser (some item) "abcd"
ループを有するなぜこれは 'データ'でループしますが 'newtype'でループしませんか?
import Control.Applicative
-- newtype Parser a = Parser { runParser :: String -> [(a, String)] }
data Parser a = Parser { runParser :: String -> [(a, String)] }
instance Functor Parser where
fmap f (Parser p) = Parser (\s -> [(f x, s') | (x, s') <- p s ])
instance Applicative Parser where
pure a = Parser (\s -> [(a, s)])
Parser q <*> Parser p = Parser (\s -> [(f x, s'') | (f, s') <- q s, (x, s'') <- p s'])
instance Alternative Parser where
empty = Parser (\s -> [])
Parser q <|> Parser p = Parser (\s -> q s ++ p s)
item = Parser (\s -> case s of
(x:xs) -> [(x, xs)]
_ -> []
)
が、パーサはnewtype
として宣言されている場合、それだけで正常に動作します。
正確には何あなたは尋ねる?このことを示す例がありますか? – Alec
この質問にはほとんど情報がありません。もっと詳細を共有しないと、何が起こっているのか分かりません。 [MCVE](http://stackoverflow.com/help/mcve)を提供する必要があります。 – chi