[Haskell-cafe] Type checking of partial programs

Ryan Ingram ryani.spam at gmail.com
Thu Mar 20 16:41:56 EDT 2008


You can transform this into valid Haskell98 in the following way:

foo_infer xs _ | const False (xs :: [Foo]) = undefined
foo_infer xs placeholder_2 = map ph xs

foo xs = foo_infer xs undefined

You can then do type inference on "foo_infer", giving you

foo_infer :: [Foo] -> (Foo -> a) -> [a]

which gives you the type of the placeholder:
placeholder_2 :: Foo -> a

and the type of "foo" (which is dependent on that):
foo :: [Foo] -> [a]

Of course this gets far more difficult when you add extensions that
require type signatures so that you can't rely entirely on type
inference, such as GADTs and higher rank types.  But it's a start!

  -- ryan

On 3/20/08, ac <quuxman at gmail.com> wrote:
> Is anybody interested in working on this? This is a project I've been
> interested in for some time, but recognize I probably need some guidance
> before I go off and start hacking on it. As dcoutts pointed out on
> #haskell-soc, this may be of particular interest to people working on yi and
> HaRe. Other interesting and related projects include parsing partial
> programs to insert "placeholders" in appropriate places. An example of a
> partial program could be:
>
> foo :: [Foo] -> <placeholder 1>
> foo xs = map <placeholder 2> xs
>
> What are the possible type signatures for placeholder 1 and the possible
> expressions for placeholder 2?
>
> I would like to stir up a discussion about this, and eventually write some
> useful code.
>
>      -Abram
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


More information about the Haskell-Cafe mailing list