कोई मुझे समझने में मदद कर सकता है कि पारसी पार्सर्स लिखने के लिए आवेदक शैली का उपयोग कैसे करें?पारसी और आवेदक शैली
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
लेकिन जब मैं इसे संकलित करने के लिए प्रयास करते हैं, मैं निम्नलिखित हो:
/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.
विचार यह है कि मैं cmdParse2 एक ही बात है कि cmdParse करता है क्या करना चाहते हैं, लेकिन का उपयोग कर इस कोड को मेरे पास है है आवेदक सामान ... मेरा दृष्टिकोण शायद पूरी तरह गलत है, मैं हैकेल
आपका त्रुटि है जैसे कि आप लिखा था '(++) <$> ...' 'नहीं (:) <$> ...'। – huon
क्षमा करें, तय करें .. मैं इसे ++ और दोनों के साथ कोशिश कर रहा था: और इसे मिश्रित मिला – Arg
अच्छी तरह से शोध किए गए प्रश्नों में परम, क्योंकि जवाब "ठीक है, ध्वनि पसंद, सही ढंग से किया गया है, लेकिन इस मामूली प्रकार की त्रुटि को ठीक करें । " +1 – AndrewC