2017-04-04 18 views
0

私は最近私の学校に必要なヘビとラダーゲームを完了しましたが、私の同輩はこのコードを完全にコンパイルすることができます。私はいろいろなアプローチを試みましたが、それ以外に何ができるかはわかりません。Haskell - 複数の解析エラーの取得

以前のバージョンのHaskellをダウンロードしようとしましたが、それは役に立たなかった。私はまた、 "cabal install lens"を使ってレンズパッケージをインストールし、プログラムをコンパイルする前にghci - > import Control.Lensを使ってControl.Lensパッケージをインポートしました。

コードをコンパイルしようとすると、次のエラーが発生します。ファイル名はMain.hsです

ghc -o main Main.hs 
[1 of 1] Compiling Main    (Main.hs, Main.o) 

Main.hs:6:1: parse error on input module 

以下のコードも添付しています。誰も助けてくれてありがとう。

module Main where 

import Data.List 
import Data.Sequence 
import Data.Foldable 
import Control.Lens 

data Game = G Int Int Int [Int] [Bool] [Bool] [Bool] [Int] [Property] Int 
data Property = Int | E | A | D 
displayRow [email protected](G rows cols nplayers pos e a d drolls props turn) n = unlines [ '+' : concat (replicate n "---+") , '|' : concat (replicate n " |")] 
display [email protected](G 0 cols nplayers pos e a d drolls props turn) = "" 
display [email protected](G rows cols nplayers pos e a d drolls props turn) = (displayRow game cols) ++ display (G (rows - 1) cols nplayers pos e a d drolls props turn) 
go [email protected](G rows cols nplayers pos e a d drolls props 0) _ = display game 
go [email protected](G rows cols nplayers pos e a d drolls props turn) i 
    | elem (rows*cols) pos = display game 
    | nplayers == i = go (G rows cols nplayers pos e a d drolls props (turn - 1)) 0 
    | otherwise = go (move (G rows cols nplayers pos' e a d (tail drolls) props turn) i roll) (i + 1) where 
    roll = if d!!i then 2*(head drolls) else (head drolls) 
move (G rows cols nplayers pos e a d drolls props turn) i j = case (elemIndex posij pos) of 
    Just k -> (move (G rows cols nplayers pos' e' a' d' drolls props turn) k 1) 
    Nothing -> (G rows cols nplayers pos' e' a' d' drolls props turn) 
    where 
    posij = if (pos!!i + j) > rows*cols then rows*cols else pos!!i + j 
    pos' 
     | props!!posij > posij = if e!!i then pos & ix i .~ (2*(props!!posij) - posij) else pos & ix i .~ (props!!posij) 
     | props!!posij < posij = if a!!i then pos & ix i .~ posij else pos & ix i .~ (props!!posij) 
     | otherwise = pos & ix i .~ posij 
    e' 
     | props!!posij > posij = if e!!i then e & ix i .~ False else e 
     | props!!posij == E = e & ix i .~ True 
     | otherwise = e 
    a' 
     | props!!posij < posij = if a!!i then a & ix i .~ False else a 
     | props!!posij == A = a & ix i .~ True 
     | otherwise = a 
    d' = if (props!!posij) == D then (d & ix i .~ True) else (d & ix i .~ False) 
instance Show Game where 
    show [email protected](G rows cols nplayers pos e a d drolls props turn) = go game 0 
build (l:ls) = build' (G 0 0 0 [] [] [] [] [] [] 0) (l:ls) where 
    build' game (l:ls) = build' (update game l) ls 
    build' game [] = game 
    update (G rows cols nplayers pos e a d drolls props turn) s = case (words s) of 
        "board":l -> G (nums!!0) (nums!!1) nplayers pos e a d drolls [i | i <- [0..(nums!!0)*(nums!!1)]] turn 
        "players":l -> G rows cols (nums!!0) [0 | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] [False | _ <- [1..(nums!!0)]] drolls props turn 
        "dice":l -> G rows cols nplayers pos e a d (cycle nums) props turn 
        "ladder":l -> G rows cols nplayers pos e a d drolls (props & ix (nums!!0) .~ (nums!!1)) turn 
        "snake":l -> G rows cols nplayers pos e a d drolls (props & ix (nums!!0) .~ (nums!!1)) turn 
        "powerup":"escalator":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const E) props) turn 
        "powerup":"antivenom":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const A) props) turn 
        "powerup":"double":l -> G rows cols nplayers pos e a d drolls (over (elements (flip elem nums)) (const D) props) turn 
        "turns":l -> G rows cols nplayers pos e a d nums props (turn + (nums!!0)) where 
         nums = map read l :: [Int] 
readFrom input = build (lines input) 
main = do 
    input <- getContents 
    putStr $ show $ readFrom input 

答えて

1
  • moduleラインは、モジュールのライン
  • whereは可読性
  • ごとに機能/データ供述/インスタンス間に空白行を入れた後、すべてをインデントする必要はありません
  • 輸入を超えていなければなりません
  • すべての関数にタイプシグネチャを指定する
  • 書き込みが完了するまでコンパイルするのを待たずに、コンパイルして段階的にテストしてデザインを修正する必要があります最小限の労力で欠陥-Wallフラグ付き
  • コンパイルは、あなたが実行可能な状態にし、それをクリーンアップしたら、あなたは何を得るタイプのエラーを参照して上で動作することができます可読性

を改善する変更についての合理的な提案を与えるためにそれらを修正する。

+0

私が提供したポインタのために、数多くのエラーが修正されました。私はまだ解決できない約10のユニークなエラーに悩まされています。私は元の質問で上記のコードを編集しています。あなたは私にもっとポインターを与えてくれ、さらに私を助けてください、私は感謝します!!!!! –

+0

5 *一意のエラー –

+0

@MeChongはエラーを通知します。非常に長い場合はpastebinを使用してください – Lazersmoke

関連する問題