@@ -32,6 +32,7 @@ import Control.Applicative
3232import Control.Monad.State
3333import Data.Maybe
3434import Data.List
35+import Data.Ord
3536import Data.IntSet (IntSet)
3637import qualified Data.IntSet as IS
3738import qualified Data.Map as M
@@ -117,13 +118,33 @@ mkDecls t used
117118 return decls
118119
119120showCaseTrees :: [(Name, LDecl)] -> String
120−showCaseTrees ds = showSep "\n\n" (map showCT ds)
121+showCaseTrees = showSep "\n\n" . map showCT . sortBy (comparing defnRank)
121122 where
122123 showCT (n, LFun _ f args lexp)
123− = show n ++ " " ++ showSep " " (map show args) ++ " =\n\t "
124+ = show n ++ " " ++ showSep " " (map show args) ++ " =\n\t"
124125 ++ show lexp
125126 showCT (n, LConstructor c t a) = "data " ++ show n ++ " " ++ show a
126127
128+ defnRank :: (Name, LDecl) -> String
129+ defnRank (n, LFun _ _ _ _) = "1" ++ nameRank n
130+ defnRank (n, LConstructor _ _ _) = "2" ++ nameRank n
131+
132+ nameRank :: Name -> String
133+ nameRank (UN s) = "1" ++ show s
134+ nameRank (MN i s) = "2" ++ show s ++ show i
135+ nameRank (NS n ns) = "3" ++ concatMap show (reverse ns) ++ nameRank n
136+ nameRank (SN sn) = "4" ++ snRank sn
137+ nameRank n = "5" ++ show n
138+
139+ snRank :: SpecialName -> String
140+ snRank (WhereN i n n') = "1" ++ nameRank n' ++ nameRank n ++ show i
141+ snRank (InstanceN n args) = "2" ++ nameRank n ++ concatMap show args
142+ snRank (ParentN n s) = "3" ++ nameRank n ++ show s
143+ snRank (MethodN n) = "4" ++ nameRank n
144+ snRank (CaseN n) = "5" ++ nameRank n
145+ snRank (ElimN n) = "6" ++ nameRank n
146+ snRank (InstanceCtorN n) = "7" ++ nameRank n
147+
127148isCon (TyDecl _ _) = True
128149isCon _ = False
129150