Voici le code qui, à mon avis, ne devrait pas causer de problème, mais pour une raison quelconque?Haskell Parsec problème étrange avec plusieurs occurrences d'expression
program = expr8
<|> seqOfStmt
seqOfStmt =
do list <- (sepBy1 expr8 whiteSpace)
return $ if length list == 1 then head list else Seq list
Je reçois 3 erreurs par rapport au fait que 'list' n'est pas dans la portée? Il est probablement évident que ce qui ne va pas, mais je ne peux pas comprendre pourquoi
S'il y a des alternatives à cela, je voudrais vraiment les entendre!
Merci à l'avance, Seán
Votre indentation a l'air cassée (les lignes suivantes 'program' et' seqOfStmt' devraient être indentées plus loin que la définition.A part cela, il est très difficile de tester votre programme sans connaître vos autres définitions (par exemple où 'expr8' , 'whiteSpace' et' Seq' viennent?) –
Le problème est le type de la valeur que vous retournez: 'si longueur liste == 1 puis liste de tête sinon Seq liste' - disons que la liste est [a], alors vous retournez a dans la clause then et quelque chose de très différent dans la clause else (sauf si Seq est un constructeur de type '[a] -> a', ce qui n'est pas facilement possible) – Ingo