Subversion

Galculator

?curdirlinks? -

Blame information for rev 1

Line No. Rev Author Line
1 1 paulosilva  
2 {-# OPTIONS_GHC -Wall #-}
3  
4 -------------------------------------------------------------------------------
5  
6 {- |
7 Module      :  Language.Type.Utils
8 Description :  Useful functions for dealing with type representation.
9 Copyright   :  (c) Paulo Silva
10 License     :  LGPL
11  
12 Maintainer  :  paufil@di.uminho.pt
13 Stability   :  experimental
14 Portability :  portable
15  
16 -}
17  
18 -------------------------------------------------------------------------------
19  
20 module Language.Type.Utils (
21   isBasicType,
22   isBasicTypeTB,
23   isTVar,
24   isTVarTB,
25   occursIn,
26   occursInTB,
27   isConstructor,
28   collectTVar,
29   collectTVarTB,
30   getTVarNameTB
31  ) where
32  
33 import Data.Existential
34 import Language.Type.Syntax
35  
36 -------------------------------------------------------------------------------
37  
38 isBasicType :: Type a -> Bool
39 isBasicType One = True
40 isBasicType Bool = True
41 isBasicType Char = True
42 isBasicType String = True
43 isBasicType Int = True
44 isBasicType Float = True
45 isBasicType _ = False
46  
47 -------------------------------------------------------------------------------
48  
49 isBasicTypeTB :: TypeBox -> Bool
50 isBasicTypeTB (Hide t) = isBasicType t
51  
52 -------------------------------------------------------------------------------
53  
54 isTVar :: Type a -> Bool
55 isTVar (TVar _) = True
56 isTVar _ = False
57  
58 -------------------------------------------------------------------------------
59  
60 isTVarTB :: TypeBox -> Bool
61 isTVarTB (Hide t) = isTVar t
62  
63 -------------------------------------------------------------------------------
64  
65 occursIn :: Type a -> Type b -> Bool
66 occursIn t (Prod a b) = occursIn t a || occursIn t b
67 occursIn t (Either a b) = occursIn t a || occursIn t b
68 occursIn t (Maybe a) = occursIn t a
69 occursIn t (List a) = occursIn t a
70 occursIn t (Set a) = occursIn t a
71 occursIn t (Map a b) = occursIn t a || occursIn t b
72 occursIn t (Fun a b) = occursIn t a || occursIn t b
73 occursIn t (Rel a b) = occursIn t a || occursIn t b
74 occursIn t (Ord a) = occursIn t a
75 occursIn t (GC a b) = occursIn t a || occursIn t b
76 occursIn (TVar n) (TVar m) = n == m
77 occursIn _ _ = False
78  
79 -------------------------------------------------------------------------------
80  
81 occursInTB :: TypeBox -> TypeBox -> Bool
82 occursInTB (Hide a) (Hide b) = a `occursIn` b
83  
84 -------------------------------------------------------------------------------
85  
86 isConstructor :: Type a -> Bool
87 isConstructor t = not (isBasicType t) && not (isTVar t)
88  
89 -------------------------------------------------------------------------------
90  
91 collectTVar :: Type a -> [TypeBox]
92 collectTVar x@(TVar _) = [Hide x]
93 collectTVar (Prod a b) = collectTVar a ++ collectTVar b
94 collectTVar (List a) = collectTVar a
95 collectTVar (Either a b) = collectTVar a ++ collectTVar b
96 collectTVar (Maybe a) = collectTVar a
97 collectTVar (Set a) = collectTVar a
98 collectTVar (Ord a) = collectTVar a
99 collectTVar (Map a b) = collectTVar a ++ collectTVar b
100 collectTVar (Fun a b) = collectTVar a ++ collectTVar b
101 collectTVar (GC a b) = collectTVar a ++ collectTVar b
102 collectTVar _ = []
103  
104 -------------------------------------------------------------------------------
105  
106 collectTVarTB :: TypeBox -> [TypeBox]
107 collectTVarTB (Hide t) = collectTVar t
108  
109 -------------------------------------------------------------------------------
110  
111 getTVarNameTB :: TypeBox -> String
112 getTVarNameTB (Hide (TVar n)) = n
113 getTVarNameTB _ = ""
114  
115 -------------------------------------------------------------------------------

Theme by Vikram Singh | Powered by WebSVN v2.3.3