0

これが私の頭の中で問題を引き起こしてはならないコードですが、何らかの理由で問題を引き起こしますか?

    program = expr8
        <|> seqOfStmt  

    seqOfStmt = 
        do list <- (sepBy1 expr8 whiteSpace)
            return $ if length list == 1 then head list else Seq list

'list'がスコープ内にないことに関して、すべて3つのエラーが発生しますか?何が悪いのかは明らかに明らかですが、理由がわかりません

これに代わるものがあれば、私はそれらを大いに聞きたいです!

よろしくお願いします、Seán

4

1 に答える 1

3

最後の行はインデントにタブ文字を使用していますが、他の行はスペースのみを使用しています。

エディターでタブを4つのスペースに設定していますが、ghcは8文字のタブストップを使用します(端末と同じように)。

したがって、あなたのreturn行は前の行の続きとして解析され、listまだスコープ内にありません。

これを修正する簡単な方法の1つは、タブの使用を控えることです。スペースのみを使用してください。


それを修正すると、次のエラーはおそらくタイプエラーになります:head listそしてSeq list異なるタイプがあります(おそらくhead何らかの理由で再定義した場合を除く)。リストに要素が1つしかない場合に、リストを別の方法で処理する理由は明確ではありません。

于 2013-02-28T10:06:01.767 に答える