[Haskell-beginners] Possible to type a function to a particular constructor?

Ken Overton koverton at lab49.com
Sun May 2 09:54:11 EDT 2010

Hi fellow beginners (and everyone else),

As an exercise, I'm implementing a simple, untyped lambda calculus:

-- a term is a variable, an application, or abstraction (lambda)
data T = V String | A (T) (T) | L String (T)
	deriving (Eq)

So I'm writing a function that returns a list of all the free variables in a term and descendants. I can only get it to compile with type:

    freev :: T -> [T]

It'd be nice for the type of that function to be restricted to just variables like:

    freev :: T -> [V String] -- compile error: "Not in scope: type constructor or class `V'"

Is there some way to express that?  The error seems to suggest maybe haskell could do it if I'd just say it correctly.  I mean, isn't "V String" a type constructor?



More information about the Beginners mailing list