1
+ {-# LANGUAGE DeriveDataTypeable #-}
1
2
{-# LANGUAGE DeriveFunctor #-}
2
3
{-# LANGUAGE DuplicateRecordFields #-}
3
4
{-# LANGUAGE FlexibleContexts #-}
@@ -45,6 +46,7 @@ import Control.Lens.TH (makeFieldsNoPrefix, makePrisms)
45
46
import Control.Lens.Wrapped (_Wrapped )
46
47
import Control.Monad ((>=>) )
47
48
49
+ import Data.Data (Data )
48
50
import Data.Semigroup ((<>) )
49
51
50
52
class ToHaskell a where
@@ -58,15 +60,15 @@ data CaseBlock ann =
58
60
, _expr :: Expression ann
59
61
, _matches :: [(Expression ann , Expression ann )]
60
62
}
61
- deriving (Eq , Functor , Show )
63
+ deriving (Data , Eq , Functor , Show )
62
64
63
65
data FunctionApplication ann =
64
66
FunctionApplication
65
67
{ _ann :: ann
66
68
, _function :: Expression ann
67
69
, _arguments :: [Expression ann ]
68
70
}
69
- deriving (Eq , Functor , Show )
71
+ deriving (Data , Eq , Functor , Show )
70
72
71
73
data IfBlock ann =
72
74
IfBlock
@@ -75,35 +77,35 @@ data IfBlock ann =
75
77
, _ifTrue :: Expression ann
76
78
, _ifFalse :: Expression ann
77
79
}
78
- deriving (Eq , Functor , Show )
80
+ deriving (Data , Eq , Functor , Show )
79
81
80
82
data TopLevel ann =
81
83
TopLevel
82
84
{ _ann :: ann
83
85
, _statements :: [Statement ann ]
84
86
}
85
- deriving (Eq , Functor , Show )
87
+ deriving (Data , Eq , Functor , Show )
86
88
87
89
data TypeDefinition ann
88
90
= ProperType ann Identifier
89
91
| TypeConstructor ann (FunctionApplication ann )
90
- deriving (Eq , Functor , Show )
92
+ deriving (Data , Eq , Functor , Show )
91
93
92
94
data DataDeclaration ann =
93
95
DataDeclaration
94
96
{ _ann :: ann
95
97
, _typeDefinition :: TypeDefinition ann
96
98
, _constructors :: [FunctionApplication ann ]
97
99
}
98
- deriving (Eq , Functor , Show )
100
+ deriving (Data , Eq , Functor , Show )
99
101
100
102
data NewtypeDeclaration ann =
101
103
NewtypeDeclaration
102
104
{ _ann :: ann
103
105
, _typeDefinition :: TypeDefinition ann
104
106
, _constructor :: FunctionApplication ann
105
107
}
106
- deriving (Eq , Functor , Show )
108
+ deriving (Data , Eq , Functor , Show )
107
109
108
110
data FunctionDefinition ann =
109
111
FunctionDefinition
@@ -113,55 +115,55 @@ data FunctionDefinition ann =
113
115
, _body :: Expression ann
114
116
, _whereBindings :: [FunctionDefinition ann ]
115
117
}
116
- deriving (Eq , Functor , Show )
118
+ deriving (Data , Eq , Functor , Show )
117
119
118
120
data Import ann
119
121
= ImportItem ann Identifier
120
122
| ImportType ann Identifier [Identifier ]
121
- deriving (Eq , Functor , Show )
123
+ deriving (Data , Eq , Functor , Show )
122
124
123
125
data ImportSpecification ann
124
126
= ImportAll ann
125
127
| ImportOnly ann [Import ann ]
126
- deriving (Eq , Functor , Show )
128
+ deriving (Data , Eq , Functor , Show )
127
129
128
130
data Lambda ann =
129
131
Lambda
130
132
{ _ann :: ann
131
133
, _arguments :: [Expression ann ]
132
134
, _body :: Expression ann
133
135
}
134
- deriving (Eq , Functor , Show )
136
+ deriving (Data , Eq , Functor , Show )
135
137
136
138
data LetBlock ann =
137
139
LetBlock
138
140
{ _ann :: ann
139
141
, _bindings :: [(Expression ann , Expression ann )]
140
142
, _body :: Expression ann
141
143
}
142
- deriving (Eq , Functor , Show )
144
+ deriving (Data , Eq , Functor , Show )
143
145
144
146
data MacroDefinition ann =
145
147
MacroDefinition
146
148
{ _ann :: ann
147
149
, _functionDefinition :: FunctionDefinition ann
148
150
}
149
- deriving (Eq , Functor , Show )
151
+ deriving (Data , Eq , Functor , Show )
150
152
151
153
data MacroImport ann =
152
154
MacroImport
153
155
{ _ann :: ann
154
156
, _moduleName :: Identifier
155
157
, _imports :: [Identifier ]
156
158
}
157
- deriving (Eq , Functor , Show )
159
+ deriving (Data , Eq , Functor , Show )
158
160
159
161
data Pragma ann =
160
162
Pragma
161
163
{ _ann :: ann
162
164
, _pragmaSpecification :: String
163
165
}
164
- deriving (Eq , Functor , Show )
166
+ deriving (Data , Eq , Functor , Show )
165
167
166
168
data QualifiedImport ann =
167
169
QualifiedImport
@@ -170,29 +172,29 @@ data QualifiedImport ann =
170
172
, _alias :: Identifier
171
173
, _imports :: ImportSpecification ann
172
174
}
173
- deriving (Eq , Functor , Show )
175
+ deriving (Data , Eq , Functor , Show )
174
176
175
177
data RecordDefinition ann =
176
178
RecordDefinition
177
179
{ _ann :: ann
178
180
, _bindings :: [(Identifier , Expression ann )]
179
181
}
180
- deriving (Eq , Functor , Show )
182
+ deriving (Data , Eq , Functor , Show )
181
183
182
184
data RecordType ann =
183
185
RecordType
184
186
{ _ann :: ann
185
187
, _fields :: [(Identifier , Expression ann )]
186
188
}
187
- deriving (Eq , Functor , Show )
189
+ deriving (Data , Eq , Functor , Show )
188
190
189
191
data RestrictedImport ann =
190
192
RestrictedImport
191
193
{ _ann :: ann
192
194
, _moduleName :: Identifier
193
195
, _imports :: ImportSpecification ann
194
196
}
195
- deriving (Eq , Functor , Show )
197
+ deriving (Data , Eq , Functor , Show )
196
198
197
199
data TypeclassDefinition ann =
198
200
TypeclassDefinition
@@ -201,31 +203,31 @@ data TypeclassDefinition ann =
201
203
, _constraints :: [Expression ann ]
202
204
, _signatures :: [TypeSignature ann ]
203
205
}
204
- deriving (Eq , Functor , Show )
206
+ deriving (Data , Eq , Functor , Show )
205
207
206
208
data TypeclassInstance ann =
207
209
TypeclassInstance
208
210
{ _ann :: ann
209
211
, _instanceName :: Expression ann
210
212
, _definitions :: [FunctionDefinition ann ]
211
213
}
212
- deriving (Eq , Functor , Show )
214
+ deriving (Data , Eq , Functor , Show )
213
215
214
216
data TypeSignature ann =
215
217
TypeSignature
216
218
{ _ann :: ann
217
219
, _name :: Identifier
218
220
, _typeDefinition :: Expression ann
219
221
}
220
- deriving (Eq , Functor , Show )
222
+ deriving (Data , Eq , Functor , Show )
221
223
222
224
data TypeSynonym ann =
223
225
TypeSynonym
224
226
{ _ann :: ann
225
227
, _alias :: Expression ann
226
228
, _definition :: Expression ann
227
229
}
228
- deriving (Eq , Functor , Show )
230
+ deriving (Data , Eq , Functor , Show )
229
231
230
232
data Expression ann
231
233
= ECaseBlock (CaseBlock ann )
@@ -239,13 +241,13 @@ data Expression ann
239
241
| ERawExpression ann String
240
242
| ERecordDefinition (RecordDefinition ann )
241
243
| ERecordType (RecordType ann )
242
- deriving (Eq , Functor , Show )
244
+ deriving (Data , Eq , Functor , Show )
243
245
244
246
data Literal ann
245
247
= LChar ann Char
246
248
| LInt ann Int
247
249
| LString ann String
248
- deriving (Eq , Functor , Show )
250
+ deriving (Data , Eq , Functor , Show )
249
251
250
252
data Statement ann
251
253
= STopLevel (TopLevel ann )
@@ -264,7 +266,7 @@ data Statement ann
264
266
| STypeSignature (TypeSignature ann )
265
267
| STypeSynonym (TypeSynonym ann )
266
268
| SUnrestrictedImport ann Identifier
267
- deriving (Eq , Functor , Show )
269
+ deriving (Data , Eq , Functor , Show )
268
270
269
271
type Program ann = [Statement ann ]
270
272
0 commit comments