@@ -174,7 +174,7 @@ let private printAttributes
174
174
printer.NewLine
175
175
)
176
176
177
- let private tryTransformTypeParametersToText
177
+ let rec private tryTransformTypeParametersToText
178
178
( typeParameters : FSharpTypeParameter list )
179
179
=
180
180
let printer = new Printer()
@@ -187,8 +187,23 @@ let private tryTransformTypeParametersToText
187
187
if index <> 0 then
188
188
printer.WriteInline( " , " )
189
189
190
- printer.WriteInline( " '" )
191
- printer.WriteInline( typeParameter.Name)
190
+ printer.WriteInline( $" '{typeParameter.Name}" )
191
+ )
192
+
193
+ typeParameters
194
+ |> List.filter _. Constraint.IsSome
195
+ |> List.iteri ( fun index typeParameter ->
196
+ match typeParameter.Constraint with
197
+ | Some constraint_ ->
198
+ if index = 0 then
199
+ printer.WriteInline( " when " )
200
+ else
201
+ printer.WriteInline( " and " )
202
+
203
+ printer.WriteInline( $" '{typeParameter.Name}" )
204
+ printer.WriteInline( " :> " )
205
+ printer.WriteInline( printType constraint_)
206
+ | None -> ()
192
207
)
193
208
194
209
printer.WriteInline( " >" )
@@ -198,15 +213,15 @@ let private tryTransformTypeParametersToText
198
213
else
199
214
None
200
215
201
- let private printTypeParameters
216
+ and printTypeParameters
202
217
( printer : Printer )
203
218
( typeParameters : FSharpTypeParameter list )
204
219
=
205
220
match tryTransformTypeParametersToText typeParameters with
206
221
| Some typeParameters -> printer.WriteInline( typeParameters)
207
222
| None -> ()
208
223
209
- let rec private printType ( fsharpType : FSharpType ) =
224
+ and printType ( fsharpType : FSharpType ) =
210
225
match fsharpType with
211
226
| FSharpType.Object -> " obj"
212
227
| FSharpType.Mapped info ->
0 commit comments