What does this error message mean

Anders Elfgren srekel@dtek.chalmers.se
Tue, 30 Oct 2001 21:38:34 +0100 (MET)


Short intro (skip down for the real reason for this email) :
Hi, I'm a student at Chalmers and have finished the Haskell course but
actually (is IS weird, but I'm pretty sure I like it... :) ) found the
language to be pretty cool and decided to try and make an ascii-based
Dungeon Master type game. For anyone who doesn't know what that is : Its a
game in which you walk in a dungeon with corridors in a firstperson view. 

These are pictures that show what it looks like when you are looking down
a corridor that turns right two and respectively one "moves" ahead of the
current position. (Yes, I plan to make these better looking :) )


corrl_2 =       ["##############",
                "# \\        / #",
                "#  \\ ____ /  #",
                "#   |    }   #",
                "#   |____}   #",
                "#  /      \\  #",
                "# /        \\ #",
                "##############"]
corrl_1 =       ["##############",
                "# \\        / #",
                "#  \\ ______| #",
                "#   |      | #",
                "#   |______| #",
                "#  /       | #",
                "# /        \\ #",
                "##############"]


This is the whole program. 
draw simply prints out all three pictures (including the overhead map
found below)

My (current) problem lies in whatPic, which returns the error
Program error: {whatPic Facing2_North (1,6)}   
if I type in 
whatPic North (1,6)
or just call it through the draw2 function (which is supposed to be the
main drawing function, and it actually works.. Well it did yesterday until
I did something :D

(sorry about pine wrapping the lines.. if you're in luck you wont notice
it.)


import Observe
draw =  putStr ((unlines corrl_2) ++ (unlines corrl_1) ++ (unlines
maplevel1))

data Facing2 = North | South 

draw2 = putStr (unlines (whatPic North (findPos 'P' 1)))

findPos :: Char -> Int -> (Int,Int)
findPos obj location
	| head (drop (location) (unlines maplevel1)) == obj =  (location
`div` 14,location `mod` 15) 
	| otherwise  = findPos obj (location + 1)

whatPic :: Facing2 -> (Int,Int) -> Pic
whatPic facin (x,y)	| corridorType facin (x,y) == (2, "rTurn1") =
corrl_1
			| corridorType facin (x,y) == (2, "rTurn2") =
corrl_2

corridorType :: Facing2 -> (Int,Int) -> (Int, String)
corridorType facing (x,y) 
  | observe "distWall" distWall facing (x,y) (x,y) == 4 && (whatIs
(findPos 'P' 1) (1,-2) == ' ') = (2, "rTurn")
  | otherwise = (2, "rTurn")

distWall :: Facing2 -> (Int,Int) -> (Int,Int) -> Int
distWall North (x,y) (newx,newy) | whatIs (x,y) (x,y-1) == '#' = abs (y -
newy)
				 | whatIs (x,y) (x,y-1) == ' ' = distWall
North (x,y) (x,y-1)
--distWall (North) (x,y) (newx,newy) = 2
--distWall (South) (x,y) (newx,newy) = 2

whatIs :: (Int,Int) -> (Int,Int) -> Char
whatIs (x,y) (xdiff,ydiff) = head (drop (x + xdiff + y + ydiff ) (unlines
maplevel1))


--[1,2,3,4,5]

type Pic = [[Char]]
maplevel1 =	["##############",
		"#            #",
		"###          #",
		"#            #",
		"# #          #",
		"# #          #",
		"#P#m         #",
		"##############"]

corrl_2 :: Pic
corrl_2 =	["##############",
		"# \\        / #",
		"#  \\ ____ /  #",
		"#   |    }   #",
		"#   |____}   #",
		"#  /      \\  #",
		"# /        \\ #",
		"##############"]
corrl_1 =	["##############",
		"# \\        / #",
		"#  \\ ______| #",
		"#   |      | #",
		"#   |______| #",
		"#  /       | #",
		"# /        \\ #",
		"##############"]







I'm sure its something simple.. I just can't make out what could be wrong
right now.

Thanks for any replies :)

-------------------------------------------------------------------------
Anders Elfgren                          || AKA: Srekel and Farfar
Homepage: http://hem.passagen.se/srekel || Alt email: srekel@icqmail.com 
ICQ: 4596105                            || AIM: Srekel
- Kaka e gott                           || - Cs e halva mitt liv
-------------------------------------------------------------------------