Skip to content

Commit dfa0f9b

Browse files
committed
[typer] fix a bug on generalizing functions
1 parent 8099019 commit dfa0f9b

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

src/core/typer.fs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

207200
and 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

Comments
 (0)