1-----------------------------------------------------------------------------
3-- Module : Language.PureScript.Declarations
4-- Copyright : (c) Phil Freeman 2013
7-- Maintainer : Phil Freeman <paf31@cantab.net>
8-- Stability : experimental
11-- | Data types for modules and declarations
13-----------------------------------------------------------------------------
15{-# LANGUAGE DeriveDataTypeable #-}
17module Language.PureScript.Declarations where
19import Language.PureScript.Values
20import Language.PureScript.Types
21import Language.PureScript.Names
22import Language.PureScript.Kinds
23import Language.PureScript.CodeGen.JS.AST
25import qualified Data.Data as D
28-- A precedence level for an infix operator
30type Precedence = Integer
33-- Associativity for infix operators
35data Associativity = Infixl | Infixr deriving (Show, D.Data, D.Typeable)
38-- Fixity data for infix operators
40data Fixity = Fixity Associativity Precedence deriving (Show, D.Data, D.Typeable)
43-- A module declaration, consisting of a module name and a list of declarations
45data Module = Module ProperName [Declaration] deriving (Show, D.Data, D.Typeable)
48-- The type of a foreign import
52 -- A regular foreign import
56 -- A type class dictionary import, generated during desugaring of type class declarations
58 | TypeClassDictionaryImport
60 -- A type class dictionary member accessor import, generated during desugaring of type class declarations
62 | TypeClassAccessorImport deriving (Show, Eq, D.Data, D.Typeable)
65-- The data type of declarations
69 -- A data type declaration (name, arguments, data constructors)
71 = DataDeclaration ProperName [String] [(ProperName, Maybe Type)]
73 -- A minimal mutually recursive set of data type declarations
75 | DataBindingGroupDeclaration [Declaration]
77 -- A type synonym declaration (name, arguments, type)
79 | TypeSynonymDeclaration ProperName [String] Type
81 -- A type declaration for a value (name, ty)
83 | TypeDeclaration Ident Type
85 -- A value declaration (name, top-level binders, optional guard, value)
87 | ValueDeclaration Ident [[Binder]] (Maybe Guard) Value
89 -- A minimal mutually recursive set of value declarations
91 | BindingGroupDeclaration [(Ident, Value)]
93 -- A foreign import declaration (type, name, optional inline Javascript, type)
95 | ExternDeclaration ForeignImportType Ident (Maybe JS) Type
97 -- A data type foreign import (name, kind)
99 | ExternDataDeclaration ProperName Kind
101 -- A fixity declaration (fixity data, operator name)
103 | FixityDeclaration Fixity String
105 -- A module import (module name, optional set of identifiers to import)
107 | ImportDeclaration ModuleName (Maybe [Either Ident ProperName])
109 -- A type class declaration (name, argument, member declarations)
111 | TypeClassDeclaration ProperName String [Declaration]
113 -- A type instance declaration (dependencies, class name, instance type, member declarations)
115 | TypeInstanceDeclaration [(Qualified ProperName, Type)] (Qualified ProperName) Type [Declaration]
116 deriving (Show, D.Data, D.Typeable)
119-- Test if a declaration is a value declaration
121isValueDecl :: Declaration -> Bool
122isValueDecl (ValueDeclaration _ _ _ _) = True
126-- Test if a declaration is a data type or type synonym declaration
128isDataDecl :: Declaration -> Bool
129isDataDecl (DataDeclaration _ _ _) = True
130isDataDecl (TypeSynonymDeclaration _ _ _) = True
134-- Test if a declaration is a module import
136isImportDecl :: Declaration -> Bool
137isImportDecl (ImportDeclaration _ _) = True
138isImportDecl _ = False
141-- Test if a declaration is a data type foreign import
143isExternDataDecl :: Declaration -> Bool
144isExternDataDecl (ExternDataDeclaration _ _) = True
145isExternDataDecl _ = False
148-- Test if a declaration is a fixity declaration
150isFixityDecl :: Declaration -> Bool
151isFixityDecl (FixityDeclaration _ _) = True
152isFixityDecl _ = False
155-- Test if a declaration is a foreign import
157isExternDecl :: Declaration -> Bool
158isExternDecl (ExternDeclaration _ _ _ _) = True
159isExternDecl _ = False
162-- Test if a declaration is a type class or instance declaration
164isTypeClassDeclaration :: Declaration -> Bool
165isTypeClassDeclaration (TypeClassDeclaration _ _ _) = True
166isTypeClassDeclaration (TypeInstanceDeclaration _ _ _ _) = True
167isTypeClassDeclaration _ = False
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list