Subversion

Galculator

[/] [src/] [Language/] [Type/] [Syntax.hs] -

Blame information for rev 1

Line No. Rev Author Line
1 1 paulosilva  
2 1 paulosilva {-# LANGUAGE GADTs, TypeOperators, EmptyDataDecls, TypeSynonymInstances #-}
3 1 paulosilva {-# OPTIONS_GHC -Wall #-}
4 1 paulosilva  
5 1 paulosilva -------------------------------------------------------------------------------
6 1 paulosilva
7 1 paulosilva {- |
8 1 paulosilva Module : Language.Type.Syntax
9 1 paulosilva Description : Polymorphic type representation of the types used by Galculator.
10 1 paulosilva Copyright : (c) Paulo Silva
11 1 paulosilva License : LGPL
12 1 paulosilva  
13 1 paulosilva Maintainer : paufil@di.uminho.pt
14 1 paulosilva Stability : experimental
15 1 paulosilva Portability : portable
16 1 paulosilva  
17 1 paulosilva -}
18 1 paulosilva  
19 1 paulosilva -------------------------------------------------------------------------------
20 1 paulosilva
21 1 paulosilva module Language.Type.Syntax (
22 1 paulosilva   Type(..),
23 1 paulosilva   (:<->:),
24 1 paulosilva   (:<-:),
25 1 paulosilva   PO,
26 1 paulosilva   Var,
27 1 paulosilva   GC,
28 1 paulosilva   One,
29 1 paulosilva   Name,
30 1 paulosilva   TypeBox
31 1 paulosilva  ) where
32 1 paulosilva  
33 1 paulosilva import Data.Existential
34 1 paulosilva import Data.Map
35 1 paulosilva import Data.Set
36 1 paulosilva import Language.Type.Equality
37 1 paulosilva import Language.Type.Pretty
38 1 paulosilva  
39 1 paulosilva -------------------------------------------------------------------------------
40 1 paulosilva
41 1 paulosilva type One = ()
42 1 paulosilva type Name = String
43 1 paulosilva  
44 1 paulosilva type b :<-: a = a -> b
45 1 paulosilva data b :<->: a
46 1 paulosilva  
47 1 paulosilva data GC b a
48 1 paulosilva data PO a
49 1 paulosilva data Var
50 1 paulosilva  
51 1 paulosilva -------------------------------------------------------------------------------
52 1 paulosilva
53 1 paulosilva data Type a where
54 1 paulosilva   TVar :: Name -> Type Var
55 1 paulosilva
56 1 paulosilva   One :: Type One
57 1 paulosilva Bool :: Type Bool
58 1 paulosilva Char :: Type Char
59 1 paulosilva String :: Type String
60 1 paulosilva Int :: Type Int
61 1 paulosilva Float :: Type Float
62 1 paulosilva
63 1 paulosilva   Prod :: Type a -> Type b -> Type (a,b)
64 1 paulosilva Either :: Type a -> Type b -> Type (Either a b)
65 1 paulosilva
66 1 paulosilva   Maybe :: Type a -> Type (Maybe a)
67 1 paulosilva List :: Type a -> Type [a]
68 1 paulosilva Set :: Type a -> Type (Set a)
69 1 paulosilva Map :: Type a -> Type b -> Type (Map a b)
70 1 paulosilva
71 1 paulosilva   Fun :: Type b -> Type a -> Type (b :<-: a)
72 1 paulosilva Rel :: Type b -> Type a -> Type (b :<->: a)
73 1 paulosilva Ord :: Type a -> Type (PO a)
74 1 paulosilva
75 1 paulosilva   GC :: Type b -> Type a -> Type (GC b a)
76 1 paulosilva
77 1 paulosilva -------------------------------------------------------------------------------
78 1 paulosilva
79 1 paulosilva instance Show (Type t) where
80 1 paulosilva   showsPrec _ = showType
81 1 paulosilva  
82 1 paulosilva -------------------------------------------------------------------------------
83 1 paulosilva
84 1 paulosilva instance Eq (Type a) where
85 1 paulosilva   t1 == t2 = beq t1 t2
86 1 paulosilva  
87 1 paulosilva -------------------------------------------------------------------------------
88 1 paulosilva
89 1 paulosilva type TypeBox = Covert Type
90 1 paulosilva  
91 1 paulosilva -------------------------------------------------------------------------------
92 1 paulosilva
93 1 paulosilva instance Eq TypeBox where
94 1 paulosilva   (Hide t) == (Hide t') = beq t t'
95 1 paulosilva  
96 1 paulosilva -------------------------------------------------------------------------------
97 1 paulosilva
98 1 paulosilva instance Show TypeBox where
99 1 paulosilva   show (Hide a) = show a
100 1 paulosilva  
101 1 paulosilva -------------------------------------------------------------------------------
102 1 paulosilva

Theme by Vikram Singh | Powered by WebSVN v1.61