سؤال

وأنا مبتدئ الكامل في هاسكل. أحاول تجميع هذا الملف هاسكل لقد قمت بتحميل لكنها إعطائي بعض الأخطاء.

No instance for (Text.Parsec.Prim.Stream s m Char)
  arising from a use of 'letter' at Parse.lhs:649:26-31
Possible fix:
  add an instance declaration for (Text.Parsec.Prim.Stream s m Char)
In the first argument of '(<|>)', namely 'letter'
In the expression: letter <|> oneOf "_"
In the definition of 'firstAllowed':
  firstAllowed = letter <|> oneOf "_"

ولست متأكدا إذا كان هذا هو ما يكفي، ولكن هنا في قسم من الرمز مع الخطأ:

parseIdent = do { str <- indent
                ; return (makeIdent str)
                } <?> "identifier"
  where firstAllowed = oneOf "_" <|> letter
هل كانت مفيدة؟

المحلول

في الجزء الذي نقل لا يبدو أن وظيفة firstAllowed المحلية لاستخدامها في أي مكان. ماذا يحدث إذا قمت بإزالة خط where؟

وبدلا من ذلك يمكن أن محاولة إضافة هذا النوع توقيع لfirstAllowed:

 where
    firstAllowed :: Stream s m Char => ParsecT s u m Char
    firstAllowed = ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top