> 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"
Do the ids need to be numbers? You could also define data John data Julie instance PersonId John where name _ = "John" instance PersonId Julie where name _ = "Julie" _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe