[Haskell-cafe] Problem with type families
Daniel Fischer
daniel.is.fischer at web.de
Mon Sep 21 17:31:55 EDT 2009
Am Montag 21 September 2009 23:15:48 schrieb Victor Nazarov:
> I've tried to reimplement code presented in the following blog post:
> http://cdsmith.wordpress.com/2009/09/20/side-computations-via-type-classes/
>
> But I've got stuck with the following error:
>
> Triangulable.hs:41:8:
> `addRows' is not a (visible) method of class `Triangulable'
>
> Triangulable.hs:43:8:
> `addCols' is not a (visible) method of class `Triangulable'
>
> I think the minimal example to reproduce this error is the following:
>
> ...
> class Triangulable m
> where type Elem m
> (@@) :: m -> (Int, Int) -> Elem
> size :: m -> Int
> swapRows :: Int -> Int -> m -> m
> swapCols :: Int -> Int -> m -> m
> addRow :: (Num Elem) => Elem -> Int -> Int -> m -> m
> addCol :: (Num Elem) => Elem -> Int -> Int -> m -> m
>
> newtype ListMatrix a = ListMatrix [[a]]
>
> instance Num a => Triangulable (ListMatrix a)
> where type Elem (ListMatrix a) = a
> (ListMatrix xs) @@ (i, j) = xs !! i !! j
> size (ListMatrix xs) = size xs
> swapRows m n (ListMatrix xs) = ListMatrix $ swap m n xs
> swapCols m n (ListMatrix xs) = ListMatrix $ map (swap m n) xs
> addRows q m n (ListMatrix xs) = ListMatrix $ modifyNth n
> (zipWith comb (xs !! m))
> where comb a b = q * a + b
> addCols q m n (LisMatrix xs) = ListMatrix $ map (\row ->
> modifyNth n (comb (row !! m)) row)
> where comb a b = q * a + b
> ...
>
> How can I fix this?
Shouldn't the methods be called the same in the class definition and instance declaration?
So
instance ...
where
...
addRow q m n (ListMatrix xs) = ...
addCol q m n (ListMatrix xs) = ..
>
> --
> Victor Nazarov
More information about the Haskell-Cafe
mailing list