Ryan, This is exactly what I was looking for. Thanks, Pat
On 20/01/2011 18:56, Ryan Ingram wrote: > On Wed, Jan 19, 2011 at 11:56 PM, Patrick Browne <patrick.bro...@dit.ie> > wrote: >> I am trying to see what how this requirement can be represented using >> just the normal instance-implements-class relation for a comparison with >> a specification language approach. >> >> If there is no simple way to do this using type classes then I am >> obviously mis-using the technique. > > Going back to your original message: > > -- My intension is that the PERSON class should *specify* > -- that a person has a constant id called p1 > -- and that a person has a name that can be found from the id. > > You can do this with type level numerals. > > data Z > data S a > > type Zero = Z > type One = S Zero > type Two = S One > -- etc > > class PersonId a where > name :: a -> String > > instance PersonId Z where > name _ = "John" > instance PersonId (S Z) where > name _ = "Julie" > > main = putStrLn (name (undefined :: One)) -- prints "Julie" > > -- ryan This message has been scanned for content and viruses by the DIT Information Services E-Mail Scanning Service, and is believed to be clean. http://www.dit.ie _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe