@@ -1197,8 +1197,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
11971197 let rty = m.GetFSharpReturnTy( cenv.amap, range0, m.FormalMethodInst)
11981198 let argtysl = m.GetParamTypes( cenv.amap, range0, m.FormalMethodInst)
11991199 mkIteratedFunTy ( List.map ( mkTupledTy cenv.g) argtysl) rty
1200- | V v -> let _ , typ , _ = PrettyTypes.PrettifyTypes1 cenv.g v.TauType
1201- typ
1200+ | V v -> v.TauType
12021201 FSharpType( cenv, ty)
12031202
12041203 member __.HasGetterMethod =
@@ -1533,25 +1532,16 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
15331532 [ [ for ( ParamData( isParamArrayArg, isOutArg, optArgInfo, nmOpt,_ reflArgInfo, pty)) in p.GetParamDatas( cenv.amap, range0) do
15341533 // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
15351534 // either .NET or F# parameters
1536- let _ , prettyTyp , _cxs = PrettyTypes.PrettifyTypes1 cenv.g pty
15371535 let argInfo : ArgReprInfo = { Name= nmOpt; Attribs= [] }
1538- yield FSharpParameter( cenv, prettyTyp , argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ]
1536+ yield FSharpParameter( cenv, pty , argInfo, x.DeclarationLocationOpt, isParamArrayArg, isOutArg, optArgInfo.IsOptional) ]
15391537 |> makeReadOnlyCollection ]
15401538 |> makeReadOnlyCollection
15411539
15421540 | E _ -> [] |> makeReadOnlyCollection
15431541 | M m ->
1544-
15451542 [ for argtys in m.GetParamDatas( cenv.amap, range0, m.FormalMethodInst) do
1546- let _ , prettyTyps , _cxs =
1547- argtys
1548- |> List.map ( function ParamData( isParamArrayArg, isOutArg, optArgInfo, nmOpt,_ reflArgInfo, pty) -> pty)
1549- |> PrettyTypes.PrettifyTypesN cenv.g
1550- let combined =
1551- List.map2 ( fun pty ( ParamData ( isParamArrayArg , isOutArg , optArgInfo , nmOpt , reflArgInfo , _pty )) ->
1552- isParamArrayArg, isOutArg, optArgInfo, nmOpt, reflArgInfo, pty) prettyTyps argtys
15531543 yield
1554- [ for ( isParamArrayArg, isOutArg, optArgInfo, nmOpt,_ reflArgInfo, pty) in combined do
1544+ [ for ( ParamData ( isParamArrayArg, isOutArg, optArgInfo, nmOpt,_ reflArgInfo, pty)) in argtys do
15551545 // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for
15561546 // either .NET or F# parameters
15571547 let argInfo : ArgReprInfo = { Name= nmOpt; Attribs= [] }
@@ -1564,15 +1554,14 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
15641554 | None ->
15651555 let _ , tau = v.TypeScheme
15661556 if isFunTy cenv.g tau then
1567- let typeArguments , _typ = stripFunTy cenv.g tau
1568- [ for typ in typeArguments do
1557+ let argtysl , _typ = stripFunTy cenv.g tau
1558+ [ for typ in argtysl do
15691559 let allArguments =
15701560 if isTupleTy cenv.g typ
15711561 then tryDestTupleTy cenv.g typ
15721562 else [ typ]
1573- let _ , prettyTyps , _cxs = allArguments |> PrettyTypes.PrettifyTypesN cenv.g
15741563 yield
1575- prettyTyps
1564+ allArguments
15761565 |> List.map ( fun arg -> FSharpParameter( cenv, arg, { Name= None; Attribs= [] }, x.DeclarationLocationOpt, false , false , false ))
15771566 |> makeReadOnlyCollection ]
15781567 |> makeReadOnlyCollection
@@ -1581,8 +1570,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
15811570 let tau = v.TauType
15821571 let argtysl , _ = GetTopTauTypeInFSharpForm cenv.g curriedArgInfos tau range0
15831572 let argtysl = if v.IsInstanceMember then argtysl.Tail else argtysl
1584- let prettyArgtysl = argtysl |> List.map ( fun a -> PrettyTypes.PrettifyTypesN1 cenv.g ( a, tau))
1585- [ for (_, ( argtys,_),_ cxs) in prettyArgtysl do
1573+ [ for argtys in argtysl do
15861574 yield
15871575 [ for argty, argInfo in argtys do
15881576 let isParamArrayArg = HasFSharpAttribute cenv.g cenv.g.attrib_ ParamArrayAttribute argInfo.Attribs
@@ -1604,39 +1592,29 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
16041592 // For non-standard events, just use the delegate type as the ReturnParameter type
16051593 e.GetDelegateType( cenv.amap, range0)
16061594
1607- let _ , rty , _cxs = PrettyTypes.PrettifyTypes1 cenv.g rty
16081595 FSharpParameter( cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
16091596
16101597 | P p ->
16111598 // INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
16121599 let retInfo : ArgReprInfo = { Name= None; Attribs= [] }
16131600 let rty = p.GetPropertyType( cenv.amap, range0)
1614- let _ , rty , _cxs = PrettyTypes.PrettifyTypes1 cenv.g rty
16151601 FSharpParameter( cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
16161602 | M m ->
16171603 // INCOMPLETENESS: Attribs is empty here, so we can't look at return attributes for .NET or F# methods
16181604 let retInfo : ArgReprInfo = { Name= None; Attribs= [] }
16191605 let rty = m.GetFSharpReturnTy( cenv.amap, range0, m.FormalMethodInst)
1620- let _ , rty , _cxs = PrettyTypes.PrettifyTypes1 cenv.g rty
16211606 FSharpParameter( cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
16221607 | V v ->
16231608 match v.ValReprInfo with
16241609 | None ->
16251610 let _ , tau = v.TypeScheme
1626- if isFunTy cenv.g tau then
1627- let typeArguments , rty = stripFunTy cenv.g tau
1628- let empty : ArgReprInfo = { Name= None; Attribs= [] }
1629- let uncurriedArgInfos = typeArguments |> List.map ( fun t -> ( t, empty ) )
1630- let _ , ( _argtys , rty ), _csx = PrettyTypes.PrettifyTypesN1 cenv.g ( uncurriedArgInfos, rty)
1631- FSharpParameter( cenv, rty, empty, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
1632- else
1633- failwith " not a module let binding or member"
1634- | Some ( ValReprInfo( typars, argInfos, retInfo)) ->
1635-
1611+ let _argtysl , rty = stripFunTy cenv.g tau
1612+ let empty : ArgReprInfo = { Name= None; Attribs= [] }
1613+ FSharpParameter( cenv, rty, empty, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
1614+ | Some ( ValReprInfo(_ typars, argInfos, retInfo)) ->
16361615 let tau = v.TauType
1637- let c , rty = GetTopTauTypeInFSharpForm cenv.g argInfos tau range0
1638- let ( typar , ( _types , _ , prettyReturn ), _cxs ) = PrettyTypes.PrettifyTypesNM1 cenv.g ([ tau], c, rty)
1639- FSharpParameter( cenv, prettyReturn, retInfo, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
1616+ let _c , rty = GetTopTauTypeInFSharpForm cenv.g argInfos tau range0
1617+ FSharpParameter( cenv, rty, retInfo, x.DeclarationLocationOpt, isParamArrayArg= false , isOutArg= false , isOptionalArg= false )
16401618
16411619
16421620 member __.Attributes =
@@ -1850,27 +1828,77 @@ and FSharpType(cenv, typ:TType) =
18501828 GetSuperTypeOfType cenv.g cenv.amap range0 typ
18511829 |> Option.map ( fun ty -> FSharpType( cenv, ty))
18521830
1853- member x.Instantiate ( tys :( FSharpGenericParameter * FSharpType ) list ) =
1854- let typI = instType ( tys |> List.map ( fun ( tyv , typ ) -> tyv.V, typ.Typ )) typ
1831+ member x.Instantiate ( instantiation :( FSharpGenericParameter * FSharpType ) list ) =
1832+ let typI = instType ( instantiation |> List.map ( fun ( tyv , typ ) -> tyv.V, typ.V )) typ
18551833 FSharpType( cenv, typI)
18561834
1857- member private x.Typ = typ
1835+ member private x.V = typ
1836+ member private x.cenv = cenv
1837+
1838+ member private typ.AdjustType ( t ) =
1839+ FSharpType( typ.cenv, t)
18581840
18591841 override x.Equals ( other : obj ) =
18601842 box x === other ||
18611843 match other with
1862- | :? FSharpType as t -> typeEquiv cenv.g typ t.Typ
1844+ | :? FSharpType as t -> typeEquiv cenv.g typ t.V
18631845 | _ -> false
18641846
18651847 override x.GetHashCode () = hash x
18661848
18671849 member x.Format ( denv : FSharpDisplayContext ) =
18681850 protect <| fun () ->
1869- NicePrint.stringOfTy ( denv.Contents cenv.g) typ
1851+ NicePrint.prettyStringOfTy ( denv.Contents cenv.g) typ
18701852
18711853 override x.ToString () =
18721854 protect <| fun () ->
1873- " type " + NicePrint.stringOfTy ( DisplayEnv.Empty( cenv.g)) typ
1855+ " type " + NicePrint.prettyStringOfTy ( DisplayEnv.Empty( cenv.g)) typ
1856+
1857+ static member Prettify ( typ : FSharpType ) =
1858+ let t = PrettyTypes.PrettifyTypes1 typ.cenv.g typ.V |> p23
1859+ typ.AdjustType t
1860+
1861+ static member Prettify ( typs : IList < FSharpType >) =
1862+ let xs = typs |> List.ofSeq
1863+ match xs with
1864+ | [] -> []
1865+ | h :: _ ->
1866+ let cenv = h.cenv
1867+ let prettyTyps = PrettyTypes.PrettifyTypesN cenv.g [ for t in xs -> t.V ] |> p23
1868+ ( xs, prettyTyps) ||> List.map2 ( fun p pty -> p.AdjustType( pty))
1869+ |> makeReadOnlyCollection
1870+
1871+ static member Prettify ( parameter : FSharpParameter ) =
1872+ let prettyTyp = parameter.V |> PrettyTypes.PrettifyTypes1 parameter.cenv.g |> p23
1873+ parameter.AdjustType( prettyTyp)
1874+
1875+ static member Prettify ( parameters : IList < FSharpParameter >) =
1876+ let parameters = parameters |> List.ofSeq
1877+ match parameters with
1878+ | [] -> []
1879+ | h :: _ ->
1880+ let cenv = h.cenv
1881+ let prettyTyps = parameters |> List.map ( fun p -> p.V) |> PrettyTypes.PrettifyTypesN cenv.g |> p23
1882+ ( parameters, prettyTyps) ||> List.map2 ( fun p pty -> p.AdjustType( pty))
1883+ |> makeReadOnlyCollection
1884+
1885+ static member Prettify ( parameters : IList < IList < FSharpParameter >>) =
1886+ let xs = parameters |> List.ofSeq |> List.map List.ofSeq
1887+ let hOpt = xs |> List.tryPick ( function h :: _ -> Some h | _ -> None)
1888+ match hOpt with
1889+ | None -> xs
1890+ | Some h ->
1891+ let cenv = h.cenv
1892+ let prettyTyps = xs |> List.mapSquared ( fun p -> p.V) |> PrettyTypes.PrettifyTypesNN cenv.g |> p23
1893+ ( xs, prettyTyps) ||> List.map2 ( List.map2 ( fun p pty -> p.AdjustType( pty)))
1894+ |> List.map makeReadOnlyCollection |> makeReadOnlyCollection
1895+
1896+ static member Prettify ( parameters : IList < IList < FSharpParameter >>, returnParameter : FSharpParameter ) =
1897+ let xs = parameters |> List.ofSeq |> List.map List.ofSeq
1898+ let cenv = returnParameter.cenv
1899+ let prettyTyps , prettyRetTy = xs |> List.mapSquared ( fun p -> p.V) |> ( fun tys -> PrettyTypes.PrettifyTypesNN1 cenv.g ( tys, returnParameter.Type) )|> p23
1900+ let ps = ( xs, prettyTyps) ||> List.map2 ( List.map2 ( fun p pty -> p.AdjustType( pty))) |> List.map makeReadOnlyCollection |> makeReadOnlyCollection
1901+ ps, returnParameter.AdjustType( prettyRetTy)
18741902
18751903and FSharpAttribute ( cenv : cenv , attrib : AttribInfo ) =
18761904
@@ -1956,7 +1984,10 @@ and FSharpParameter(cenv, typ:TType, topArgInfo:ArgReprInfo, mOpt, isParamArrayA
19561984 let idOpt = topArgInfo.Name
19571985 let m = match mOpt with Some m -> m | None -> range0
19581986 member __.Name = match idOpt with None -> None | Some v -> Some v.idText
1987+ member __.cenv : cenv = cenv
1988+ member __.AdjustType ( t ) = FSharpParameter( cenv, t, topArgInfo, mOpt, isParamArrayArg, isOutArg, isOptionalArg)
19591989 member __.Type = FSharpType( cenv, typ)
1990+ member __.V = typ
19601991 member __.DeclarationLocation = match idOpt with None -> m | Some v -> v.idRange
19611992 member __.Attributes =
19621993 attribs |> List.map ( fun a -> FSharpAttribute( cenv, AttribInfo.FSAttribInfo( cenv.g, a))) |> makeReadOnlyCollection
0 commit comments