Skip to content

better type inference for lambdas

With the following code in a file:

{-# LANGUAGE TypeFamilies #-}
class Test a where test :: a
instance (a ~ Int, b ~ Int) => Test (a -> b) where test = id

We can tell ghci that test is a function (and nothing more) in two different ways:

*Main> :t test `asTypeOf` (undefined :: a -> b)
test `asTypeOf` (undefined :: a -> b) :: Int -> Int
*Main> :t \x -> test x
\x -> test x :: Test (t1 -> t) => t1 -> t

The type inferred for \x -> test x is very disappointing in comparison! A similar example can be cooked up with MPTCs and functional dependencies; see also http://lpaste.net/91534 for some (still quite abstract, of course) motivation.

Trac metadata
Trac field Value
Version 7.6.3
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler (Type checker)
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information