Counting Constructors

Tobias Haeberlein T.Haeberlein@gmx.de
Thu, 19 Jul 2001 18:11:38 +0200 (MEST)


Thanks all for helping me!

For those, who are interested in it: 
I got another solution of the problem:
Instead of defining 

	data Nest a = Zero | Succ a

I "lift" Nest to the class level:

	data Zero a = Zero a
	data Succ a = Succ a

	class Nest a where 
		count :: a -> Either Int a
	
	instance Nest (Zero a) where 
		count Zero = Left 0
	
	instance Nest a => Nest (Succ a) where
		count (Succ a) = case (count a) of
				Left i -> (Left i+1)
				Right _ -> (Right (Succ a)
				
Then my desired show-instance is easy to define by
	
	instance Show (Zero a) where
		show Zero = show 0
		
	instance (Show a, Nest a) => Show (Succ a) where
		show x = case (count x) of 
				Left i -> show i
				Right (Succ x') -> show x'
				
(Funny, Conor McBride does a similar "lifting" throughout his 
ingenious paper "Faking It: Simulating dependent types in Haskell"...)


-Tobi

-- 
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net

GMX Tipp:

Machen Sie Ihr Hobby zu Geld bei unserem Partner 1&1!
http://profiseller.de/info/index.php3?ac=OM.PS.PS003K00596T0409a