@@ -159,7 +159,6 @@ let unify cs =
159159 | TyDataTypeSelf ( n, lts), TyDataTypeSelf ( m, rts) when n = m ->
160160 rest |> List.append ( List.map2 ( fun x y -> ( x, y, tm)) lts rts) |> u
161161 | s, t ->
162- printfn " %A , %A " s t
163162 UnifyFailed ( None, prettify' s, prettify' t) |> failat tm.info.source
164163 | ( s, t, u) :: _ ->
165164 UnifyFailed ( None, prettify s, prettify t) |> failat u.info.source
@@ -190,19 +189,13 @@ let rec reconTemporal (ctx: Context<PolyType>)
190189 ( term', ty', uniq, cstr)
191190
192191 | TmLetRun ( vname, ti, tmv, tmb) ->
192+ let valueTy , uniq = genUniq uniq |> Tuple.map2 NTTyVar id
193193 let ( tmv' , tyv , uniq , cstrv ) = recon ctx stack uniq tmv
194- let tyv ' =
195- cstrv
196- |> unify
197- |> cstrToAsgn
198- |> substAll <| tyv
199- |> runTypeBy ti
200- let ctx ' = ctx |> Context.addTerm vname ( tyv' |> generalize ctx)
194+ let ctx ' = ctx |> Context.addTerm vname ( MonoType valueTy)
201195 let ( tmb' , tyb , uniq , cstrb ) = recon ctx' stack uniq tmb
202- let ( nb , uniq ) = genUniq uniq
203- let term ' = TmLetRun ( vname, ti, tmv', tmb') |> addTy ( NTTyVar nb)
204- ( term', NTTyVar nb, uniq,
205- cstrb @ [ Constraint ( NTTyVar nb, tyb, term')])
196+ let term ' = TmLetRun ( vname, ti, tmv', tmb') |> addTy tyb
197+ term', tyb, uniq,
198+ cstrv @ cstrb @ [ Constraint ( valueTy |> delayTypeBy ti, tyv, term')]
206199
207200and recon ( ctx : Context < PolyType >)
208201 ( stack : TemporalType list )
@@ -282,7 +275,7 @@ and recon (ctx: Context<PolyType>)
282275 let ( value' , tvalue , uniq , cstr1 ) = recon ctx stack uniq value
283276 let cstr1 ' = unify cstr1
284277 let tvalue ' = tvalue |> substAll ( cstrToAsgn cstr1')
285- let tx = generalize ctx tvalue'
278+ let tx = MonoType tvalue'
286279 let ctx ' = ctx |> Context.addTerm x tx
287280 let ( body' , tbody , uniq , cstr2 ) = recon ctx' stack uniq body
288281
0 commit comments