fix erasure issues inside where clauses (add type to LetRec)
This commit is contained in:
@@ -57,19 +57,11 @@ updateMap k v (MapOf map) = case insertT23 k v map of
|
||||
Left map' => MapOf map'
|
||||
Right (a, b, c) => MapOf (Node2 a b c)
|
||||
|
||||
-- FIXME this doesn't work in a `where` because Letrec doesn't have the type
|
||||
toList' : ∀ k v h. T23 h k v → List (k × v) → List (k × v)
|
||||
toList' (Leaf k v) acc = (k, v) :: acc
|
||||
toList' (Node2 t1 k1 t2) acc = toList' t2 (toList' t1 acc)
|
||||
toList' (Node3 t1 k1 t2 k2 t3) acc = toList' t3 $ toList' t2 $ toList' t1 acc
|
||||
|
||||
toList : ∀ k v. SortedMap k v → List (k × v)
|
||||
toList {k} {v} (MapOf smap) = reverse $ toList' smap Nil
|
||||
-- FIXME erasure checking false positive (need type on foo in env when processing Letrec)
|
||||
-- where
|
||||
-- foo : ∀ k v h. T23 h k v → List (k × v) → List (k × v)
|
||||
-- foo (Leaf k v) acc = (k, v) :: acc
|
||||
-- foo (Node2 t1 k1 t2) acc = foo t2 (foo t1 acc)
|
||||
-- foo (Node3 t1 k1 t2 k2 t3) acc = foo t3 $ foo t2 $ foo t1 acc
|
||||
toList {k} {v} (MapOf smap) = reverse $ go smap Nil
|
||||
where
|
||||
go : ∀ h. T23 h k v → List (k × v) → List (k × v)
|
||||
go (Leaf k v) acc = (k, v) :: acc
|
||||
go (Node2 t1 k1 t2) acc = go t2 (go t1 acc)
|
||||
go (Node3 t1 k1 t2 k2 t3) acc = go t3 $ go t2 $ go t1 acc
|
||||
toList _ = Nil
|
||||
|
||||
|
||||
Reference in New Issue
Block a user