On 06/02/2012, at 11:35 , Amos Robinson wrote:

> Hey,
> This is as minimal as I could get it. It typechecks, so I guess it's a
> problem with eval.
> 
> :eval..
> let ap
> = \(f : Int R0# -> Int R0#).
>    \(x : Int R0#).
>        f x
> in
> let id = ap (\(x:Int R0#).x) in
> ()
> ;;
> 
> 
> * OFF THE RAILS!
> Type mismatch in let-binding.
>                The binder: id
>                  has type: Int R0# -(!0 | Use R0#)> Int R0#
>     but the body has type: Int R0# -> Int R0#
>             when checking: let id : Int R0# -(!0 | Use R0#)> Int R0#
> = \(x : Int R0#).L2# x in ()


This is fixed.

With the variable  f :: (Int R0# -> Int R0#)  the region handle R0# is not 
reachable from 'f' (because it's just in the parameter an return type). I 
wasn't handling this properly in the type checker.

Ben.

-- 
Disciple-Cafe mailing list
http://groups.google.com/group/disciple-cafe

Reply via email to