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
