
"Thomas" == Thomas Davie
writes:
Thomas> Hi Colin, northernRange :: PieceType > Int -- note the Thomas> camel case, that's traditional in Haskell circles I know, but I find it vile. Thomas> northernRange p | p `elem` [Lance, ReverseChariot, Thomas> VerticalMover ....] = 11 | p `elem` [Bishop, Kylin,....] = Thomas> 0 | otherwise = 1 Thomas> These are called "pattern guards" – you can put any Thomas> boolean expression in them. Ah, thanks, that will do nicely. Thomas> Of note, if you provide an Enum instance for PieceType you Thomas> may really be able to do this: Thomas> northernRange p | p `elem` [Lance..SoaringEagle] = 11 | p Thomas> `elem` [Bishop..HornedFalcon] = 0 | otherwise = 1 I thought of that, but there are additional functions to do where the required ordering would be different. Thomas> Finally, my guess is that you probably want a much more Thomas> general type for PieceType that doesn't need extended Thomas> every time you add a Piece to your game (and similarly Thomas> doesn't need every function in your program extended at Thomas> the same time). Perhaps something like this: Thomas> data Piece = Piece { name :: String, northernRange :: Thomas> Int } A reasonable guess, but as the pieces types are fixed (it's an ancient game) I preferred to write it this way. BTW is this (as it looks to me) a classic space-time trade-off? -- Colin Adams Preston Lancashire