[Haskell-beginners] typeclass confusion

Greg greglists at me.com
Mon Aug 23 22:33:21 EDT 2010


I'm back to trying to teach myself Haskell, and I've already got myself into a muddle again.  I've begun playing a bit with the type system, and typeclasses and figured I'd build a type to hold angular values since it would be nice to force the type system to check whether I'm using degrees or radians:

data Angle a = Radians a
             | Degrees a
             deriving (Eq, Show)

Then I decided I wanted to create a (gratuitous) type class to abstract out the radian/degree conversions:

class Angular a where
  rad :: a -> a
  rad x = pi * (deg x) / 180
  deg :: a -> a
  deg x = 180 * (rad x) / pi

Then tried to make Angle an instance of Angular (such as Float in an instance of Floating):

instance Angular (Angle a) where
    rad (Radians x) = x
    deg (Degrees x) = x 

I've removed all the context clauses, rather than pick one of many equally broken implementations to share, because that seems to be a large part of where my problems are.

Is this just an issue of syntax, or am I doing something fundamentally wrong?


-------------- next part --------------
Skipped content of type multipart/related

More information about the Beginners mailing list