
Hi. Does Haskell allow you to flip around type parameters somehow? I was playing around with toy code (still learning the fundamentals) and I came up with a class like this: code: -------- class Rotatable2D a where rotate :: (Num b) => (a b) -> b -> (a b) -------- It was easy to make an instance of a generic single-parameter type: code: -------- data Angle a = Angle a deriving (Show) instance Rotatable2D Angle where rotate (Angle a) b = Angle (a + b) -------- But let's say I have something a little more complicated: code: -------- data CircAppr a b = CircAppr a a b -- radius, rotation angle, number of points -------- I think I need something like so: -------- instance Rotatable2D (\x -> CircAppr x a) where rotate (CircAppr a b c) d = CircAppr a (b + d) c -------- But I tried that and it isn't valid syntax. -- frigidcode.com

No. You'll have to use a newtype. Type parameter order is a huge deal
for some types, e.g. monad transformers, you'd better think about it
beforehand.
On Thu, 09 May 2013 19:39:12 -0800 Christopher Howard
Hi. Does Haskell allow you to flip around type parameters somehow? I was playing around with toy code (still learning the fundamentals) and I came up with a class like this:
code: -------- class Rotatable2D a where
rotate :: (Num b) => (a b) -> b -> (a b) --------
It was easy to make an instance of a generic single-parameter type:
code: -------- data Angle a = Angle a deriving (Show)
instance Rotatable2D Angle where
rotate (Angle a) b = Angle (a + b) --------
But let's say I have something a little more complicated:
code: -------- data CircAppr a b = CircAppr a a b -- radius, rotation angle, number of points --------
I think I need something like so: -------- instance Rotatable2D (\x -> CircAppr x a) where
rotate (CircAppr a b c) d = CircAppr a (b + d) c --------
But I tried that and it isn't valid syntax.
participants (2)
-
Christopher Howard
-
kudah