on master help sign in
Add proper namespace to class instances

Fixes #1779

commite34c6df87d89e56f19b25961fb41cb4aa9efc41d authorEdwin Brady <ecb10@st-andrews.ac.uk> dateTue 9 Dec 2014, 17:27 (12 years ago) parentfbcd643
3 files changed+11−5
src/Idris/Core/TT.hs+4 src/Idris/Elab/Instance.hs+6−4 src/Idris/IBC.hs+1−1
src/Idris/Core/TT.hs+4
@@ -1167,8 +1167,12 @@ nextName (SN x) = SN (nextName' x)
11671167 where
11681168 nextName' (WhereN i f x) = WhereN i f (nextName x)
11691169 nextName' (WithN i n) = WithN i (nextName n)
1170+ nextName' (InstanceN n ns) = InstanceN (nextName n) ns
1171+ nextName' (ParentN n ns) = ParentN (nextName n) ns
11701172 nextName' (CaseN n) = CaseN (nextName n)
1173+ nextName' (ElimN n) = ElimN (nextName n)
11711174 nextName' (MethodN n) = MethodN (nextName n)
1175+ nextName' (InstanceCtorN n) = InstanceCtorN (nextName n)
11721176
11731177type Term = TT Name
11741178type Type = Term
src/Idris/Elab/Instance.hs+6−4
@@ -66,7 +66,7 @@ elabInstance info syn what fc cs n ps t expn ds = do
6666 cs -> tclift $ tfail $ At fc
6767 (CantResolveAlts (map fst cs))
6868 let constraint = PApp fc (PRef fc n) (map pexp ps)
69− let iname = mkiname n ps expn
69+ let iname = mkiname n (namespace info) ps expn
7070 let emptyclass = null (class_methods ci)
7171 when (what /= EDefns || (null ds && not emptyclass)) $ do
7272 nty <- elabType' True info syn emptyDocstring [] fc [] iname t
@@ -140,9 +140,11 @@ elabInstance info syn what fc cs n ps t expn ds = do
140140 [PConstant (AType (ATInt ITNative))] -> True
141141 _ -> False
142142
143− mkiname n' ps' expn' =
143+ mkiname n' ns ps' expn' =
144144 case expn' of
145− Nothing -> SN (sInstanceN n' (map show ps'))
145+ Nothing -> case ns of
146+ Nothing -> SN (sInstanceN n' (map show ps'))
147+ Just m -> sNS (SN (sInstanceN n' (map show ps'))) m
146148 Just nm -> nm
147149
148150 substInstance ips pnames (PInstance syn _ cs n ps t expn ds)
@@ -150,7 +152,7 @@ elabInstance info syn what fc cs n ps t expn ds = do
150152
151153 isOverlapping i (PInstance syn _ _ n ps t expn _)
152154 = case lookupCtxtName n (idris_classes i) of
153− [(n, ci)] -> let iname = (mkiname n ps expn) in
155+ [(n, ci)] -> let iname = (mkiname n (namespace info) ps expn) in
154156 case lookupTy iname (tt_ctxt i) of
155157 [] -> elabFindOverlapping i ci iname syn t
156158 (_:_) -> return True
src/Idris/IBC.hs+1−1
@@ -32,7 +32,7 @@ import Codec.Compression.Zlib (compress)
3232import Util.Zlib (decompressEither)
3333
3434ibcVersion :: Word8
35−ibcVersion = 86
35+ibcVersion = 87
3636
3737data IBCFile = IBCFile { ver :: Word8,
3838 sourcefile :: FilePath,