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 <[EMAIL PROTECTED]> 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@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe