[EMAIL PROTECTED] wrote:
Jules Bean <[EMAIL PROTECTED]> wrote,
concerning the problem of getting at the types of local definitions:

 > Simon Peyton-Jones wrote:
 > The principal difficulties here are to do with "what do we want"
 > rather the implementation challenges.
 >
 > > 1.  Should the compiler print the type of every declaration? Should GHCi 
allow you to ask the type of a local decl?
> > > > IMO, ghci should definitely allow you to ask. This comes up for me every > time that I write any haskell code (and in general I end up hoisting > local definitions to the top level, which is a real pain if there is > local scope, data or type, to hoist with it). > > > 2. How should the variables be identified? There may be many local bindings for 'f', so you can't say just ":t f". Ditto if dumping all local bindings.
 > >
> > > > I think this is a hard question. I was imagining some kind of > hierarchical system like foo.f, in the case that f is locally defined > inside foo. (Yes I know we can't easily use '.' for that). There might > be might be multiple fs inside the definition of foo; indeed there might > even be multiple fs nested inside each other.


I just wanted to contribute a PRACTICAL TRICK I use:


* If the local definition is a pattern binding

    f = ...

  then I just add

    f :: Ordering

* If the local definition is a, say binary, function binding

    f p1 p2 = ...

  then I just add

    f :: Float -> Double -> Ordering

  (Type does not matter for the number of function arrows you need to put;
   only the syntactic arity of the bindings matters here.)


This relies on the fact that the types Float, Double, and Ordering
very rarely occur in my code --- pick your own.

Why not just declare a type you don't use?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to