
23 Aug
2010
23 Aug
'10
11:06 p.m.
You don't need a type class, you can just define your functions with pattern matching: rad :: Angle a -> a rad (Radians x) = x rad (Degrees x) = pi * (deg x) / 180 deg :: Angle a -> a deg (Radians x) = 180 * (rad x) / pi deg (Degrees x) = x Alternatively, you can define Radians and Degrees as separate types and use a type class: data Radians a = Radians a data Degrees a = Degrees a class Angular a where rad :: a b -> b deg :: a b -> b instance Angular Radians where rad (Radians x) = x deg (Radians x) = 180 * (rad x) / pi instance Angular Degrees where rad (Degrees x) = pi * (deg x) / 180 deg (Degrees x) = x This would be extensible, but it this case not really useful.