[Haskell-beginners] Possible to type a function to a particular
jakubuv at gmail.com
Mon May 3 07:57:34 EDT 2010
You can additionally try to change your definition of lambda-terms to use
parametric types as follows.
data T var = V var | A (T var) (T var) | L var (T var)
Then you can write `freev` with the following type.
freev :: T var -> [var]
On Sun, May 02, 2010 at 09:54:11AM -0400, Ken Overton wrote:
> 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?
> Beginners mailing list
> Beginners at haskell.org
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.
More information about the Beginners