[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