Haskell - >在'where'

时间:2017-10-18 19:13:09

标签: haskell

任何人都可以帮助我理解为什么我收到此错误? tar2.hs:40:41:错误:解析输入'c'上的错误

我试图移动到哪里,但我得到同样的错误......

函数'avancar'接收位置和方向,并根据相同方向给出新位置

type Caminho = [Passo]
data Passo 
  = Avanca
  | Sobe
  | Desce 
  | CurvaEsq
  | CurvaDir
  deriving (Eq,Read,Show)

data Mapa = Mapa (Posicao,Orientacao) Tabuleiro
  deriving (Eq,Read,Show)

type Tabuleiro = [[Peca]]

data Peca = Peca Tipo Altura
  deriving (Eq,Read,Show) 

data Tipo = Rampa Orientacao | Curva Orientacao | Recta | Lava
  deriving (Eq,Read,Show)

type Posicao  = (Int,Int)
type Dimensao = (Int,Int)
type Altura = Int 


    posi :: Tabuleiro -> Posicao -> Orientacao -> Peca
    posi t (x,y) orientacao = (t !! y) !! x 

    tipo :: Peca -> Tipo

tipo (Peca a h) = a


new_pos :: Mapa -> Mapa
new_pos (Mapa ((x,y), orientacao) []) = Mapa ((x,y),orientacao) []
new_pos (Mapa ((x,y), orientacao) (h:t)) | e == Recta = Mapa (b, orientacao) (h:t)
                                         | e == Curva Norte && orientacao == Norte = Mapa (d, Este) (h:t)
                                         | e == Curva Norte && orientacao == Oeste = Mapa (c, Sul) (h:t)
                                         | e == Curva Sul && orientacao == Sul = Mapa (d, Oeste) (h:t)
                                         | e == Curva Sul && orientacao == Este = Mapa (c, Norte) (h:t)
                                         | e == Curva Este && orientacao == Este = Mapa (d, Sul) (h:t)
                                         | e == Curva Este && orientacao == Norte = Mapa (c, Oeste) (h:t)
                                         | e == Curva Oeste && orientacao == Oeste = Mapa (d, Norte) (h:t)
                                         | e == Curva Oeste && orientacao == Sul = Mapa (c, Este) (h:t)
                                         | e == Rampa Norte && orientacao == Norte = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Sul && orientacao == Norte = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Este && orientacao == Este = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Oeste && orientacao == Este = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Sul && orientacao == Sul = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Norte && orientacao == Sul = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Oeste && orientacao == Oeste = Mapa (b, orientacao) (h:t)
                                         | e == Rampa Este && orientacao == Oeste = Mapa (b, orientacao) (h:t) 
                                       where 
                                        b = avancar (x,y) orientacao
                                        c = avancar (x,y) (muda_esq orientacao)
                                        d = avancar (x,y) (muda_dir orientacao)
                                        e = tipo (posi (h:t) (x,y) orientacao)

avancar :: Posicao -> Orientacao -> Posicao
avancar (x,y) orientacao = if (orientacao == Norte) then (x,y - 1)
    else if (orientacao == Sul) then (x,y + 1)
        else if (orientacao == Este) then (x + 1,y)
            else (x - 1,y) 

1 个答案:

答案 0 :(得分:3)

我看到的唯一解析错误是positipo的类型声明比其他任何内容都缩进。一旦我解决了这个问题,这个文件解析得很好(虽然还有其他错误)。