[Haskell-cafe] Status of TypeDirectedNameResolution proposal?

Roman Leshchinskiy rl at cse.unsw.edu.au
Wed Nov 18 05:58:42 EST 2009


On 18/11/2009, at 21:10, Simon Peyton-Jones wrote:

> Yes I think it can, although you are right to point out that I said nothing about type inference.  One minor thing is that you've misunderstood the proposal a bit.  It ONLY springs into action when there's a dot.  So you'd have to write
> 	bar1 x = x.foo
> 	bar2 x = x.foo

Yes, that's what I meant to write, silly me. I promise to pay more attention next time.

> OK so now it works rather like type functions.  Suppose, the types with which foo was in scope were
> 	foo :: Int -> Int
> 	foo :: Bool -> Char
> 
> Now imagine that we had a weird kind of type function
> 
> 	type instance TDNR_foo Int = Int -> Int
> 	type instance TDNR_foo Bool = Bool -> Char
> 
> Each 'foo' gives a type instance for TDNR_foo, mapping the type of the first argument to the type of that foo.

Hmm... GHC doesn't allow this:

type instance TDNR_foo () = forall a. () -> a -> a

IIUC this restriction is necessary to guarantee termination. Given your analogy, wouldn't this proposal run into similar problems?

> | Another example: suppose we have
> | 
> | data T a where
> |   TInt  :: T Int
> |   TBool :: T Bool
> | 
> | foo :: T Int -> u
> | foo :: T Bool -> u
> | 
> | bar :: T a -> u
> | bar x = case x of
> | 	  TInt  -> foo x
> | 	  TBool -> foo x
> | 
> | Here, (foo x) calls different functions in the two alternatives, right? To be
> | honest, that's not something I'd like to see in Haskell.
> 
> You mean x.foo and x.foo, right?  Then yes, certainly. 
> 
> Of course that's already true of type classes:
> 
> 	data T a where
>         T1 :: Show a => T a
> 	  T2 :: Sow a => T a
> 
>       bar :: a -> T a -> String
>       bar x y = case y of
>                   T1 -> show x
>                   T2 -> show x
> 
> Then I get different show's.

How so? Surely you'll get the same Show instance in both cases unless you have conflicting instances in your program?

Roman
 



More information about the Haskell-Cafe mailing list