여기에 코드입니다 : 현재 코드, 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