ai đó có thể giúp tôi hiểu cách sử dụng Kiểu ứng dụng để viết trình phân tích Parsec không? Đây là mã tôi có:Parsec và phong cách áp dụng
module Main where
import Control.Applicative hiding (many)
import Text.Parsec
import Data.Functor.Identity
data Cmd = A | B deriving (Show)
main = do
line <- getContents
putStrLn . show $ parseCmd line
parseCmd :: String -> Either ParseError String
parseCmd input = parse cmdParse "(parser)" input
cmdParse :: Parsec String() String
cmdParse = do
slash <- char '/'
whatever <- many alphaNum
return (slash:whatever)
cmdParse2 :: String -> Parsec String() String
cmdParse2 = (:) <$> (char '/') <*> many alphaNum
nhưng khi tôi cố gắng để biên dịch nó, tôi nhận được như sau:
/home/tomasherman/Desktop/funinthesun.hs:21:13:
Couldn't match expected type `Parsec String() String'
with actual type `[a0]'
Expected type: a0 -> [a0] -> Parsec String() String
Actual type: a0 -> [a0] -> [a0]
In the first argument of `(<$>)', namely `(:)'
In the first argument of `(<*>)', namely `(:) <$> (char '/')'
Failed, modules loaded: none.
Ý tưởng là tôi muốn cmdParse2 để làm điều tương tự mà cmdParse có, nhưng sử dụng công cụ ứng dụng ... cách tiếp cận của tôi có thể hoàn toàn sai, tôi mới có haskell
Lỗi của bạn như thể bạn đã viết '(++) <$> ...' not '(:) <$> ...'. – huon
xin lỗi, cố định .. tôi đã thử nó với cả hai ++ và: và đã trộn nó lên – Arg
Cuối cùng trong câu hỏi được nghiên cứu kỹ lưỡng, bởi vì câu trả lời là "Thực hiện tốt, lựa chọn âm thanh, thực hiện chính xác, nhưng sửa lỗi loại nhỏ này . " +1 – AndrewC