[Haskell-beginners] Could not deduce (Matrix m (Maybe a)) from the
context (Matrix m a)
Lyndon Maydwell
maydwell at gmail.com
Fri Jan 29 03:46:01 EST 2010
Hi Beginners.
I'm trying to write a matrix class, for a game of life implementation,
and am having trouble with the vicinityMatrix function.
When I define it inside the class I get the error "Could not deduce
(Matrix m (Maybe a)) from the context (Matrix m a)".
However when I define it inside ghci, there is no problem: :t \m x y
-> fromRows $ vicinityRows m x y
\m x y -> fromRows $ vicinityRows m x y
:: forall (m :: * -> *) (m1 :: * -> *) a.
(Matrix m (Maybe a), Matrix m1 a) =>
m1 a -> Integer -> Integer -> m (Maybe a)
How would I modify my class to allow the definition?
The class is defined below.
module Matrix (Matrix) where
import Data.Array
import Data.Maybe (catMaybes)
import Control.Monad (guard)
class Matrix m a
where
fromRows :: [[a]] -> m a
toList :: m a -> [a]
rows :: m a -> Integer
columns :: m a -> Integer
row :: m a -> Integer -> [a]
column :: m a -> Integer -> [a]
at :: m a -> Integer -> Integer -> a
(!!!) :: m a -> Integer -> Integer -> a
vicinityRows :: m a -> Integer -> Integer -> [[Maybe a]]
vicinityMatrix :: m a -> Integer -> Integer -> m (Maybe a)
neighbours :: m a -> Integer -> Integer -> [a]
toList m = do
x <- [0 .. columns m - 1]
y <- [0 .. rows m - 1]
return $ at m x y
row m n = [at m x n | x <- [0 .. columns m - 1]]
column m n = [at m n y | y <- [0 .. rows m - 1]]
at = (!!!)
(!!!) = at
vicinityRows m x y = do
x' <- [x - 1 .. x + 1]
return $ do
y' <- [y - 1 .. y + 1]
return cell where
cell
| x < 0 = Nothing
| y < 0 = Nothing
| x >= columns m = Nothing
| y >= rows m = Nothing
| otherwise = Just $ at m x y
vicinityMatrix m x y = fromRows $ vicinityRows m x y
More information about the Beginners
mailing list