on master help sign in
Type class fix
49259a5Edwin Brady
src/Idris/AbsSyntax.hs+10−1
@@ -76,6 +76,7 @@ addToCalledG n ns = return () -- TODO
76
76
77-- Add a class instance function. Dodgy hack: Put integer instances first in the
77-- Add a class instance function. Dodgy hack: Put integer instances first in the
78-- list so they are resolved by default.
78-- list so they are resolved by default.
79+-- Dodgy hack 2: put constraint chasers (@@) last
79
80
80addInstance :: Bool -> Name -> Name -> Idris ()
81addInstance :: Bool -> Name -> Name -> Idris ()
81addInstance int n i
82addInstance int n i
@@ -87,7 +88,15 @@ addInstance int n i
87 _ -> do let cs = addDef n (CI (MN 0 "none") [] [] [] [i]) (idris_classes ist)
88 _ -> do let cs = addDef n (CI (MN 0 "none") [] [] [] [i]) (idris_classes ist)
88 put (ist { idris_classes = cs })
89 put (ist { idris_classes = cs })
89 where addI i ins | int = i : ins
90 where addI i ins | int = i : ins
90− | otherwise = ins ++ [i]
91+ | chaser n = ins ++ [i]
92+ | otherwise = insI i ins
93+ insI i [] = [i]
94+ insI i (n : ns) | chaser n = i : n : ns
95+ | otherwise = n : insI i ns
96+
97+ chaser (UN ('@':'@':_)) = True
98+ chaser (NS n _) = chaser n
99+ chaser _ = False
91
100
92addClass :: Name -> ClassInfo -> Idris ()
101addClass :: Name -> ClassInfo -> Idris ()
93addClass n i
102addClass n i