Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
97f3d0a
Add failing unit test to illustrate problem.
nojaf Mar 30, 2023
03085c3
Ensure that the signature file typar name is preserved.
nojaf Mar 30, 2023
2e90785
Extract code to separate module.
nojaf Mar 30, 2023
d6b30e0
Pretty name typars after checking signature file.
nojaf Mar 30, 2023
f06db6c
Consider TypeCheckingMode.Graph to be deterministic for now.
nojaf Mar 30, 2023
ccf2fb0
FSharpGenericParameter has a name now.
nojaf Mar 30, 2023
2d1c7aa
Update FSharp.Core Debug SurfaceArea.
nojaf Mar 30, 2023
b801f3c
Add surface from Ubuntu
nojaf Mar 30, 2023
65b6cf9
Add extra unit test.
nojaf Mar 30, 2023
89a8661
Update FSharp.Core surface area for netstandard2.0
nojaf Mar 31, 2023
309111d
Update FSharp.Core surface area for netstandard2.0 DEBUG
nojaf Mar 31, 2023
1fc852d
Merge branch 'main' into typar-name-signature-data
nojaf Mar 31, 2023
b84896b
Merge branch 'main' into typar-name-signature-data
nojaf Mar 31, 2023
1e08652
Add space in unit test name.
nojaf Apr 3, 2023
abe7729
Merge branch 'typar-name-signature-data' of https://github.com/nojaf/…
nojaf Apr 3, 2023
1c053b2
Merge branch 'main' into typar-name-signature-data
nojaf Apr 3, 2023
7e91aa3
Merge branch 'main' into typar-name-signature-data
nojaf Apr 3, 2023
7945f36
Merge branch 'main' into typar-name-signature-data
nojaf Apr 3, 2023
ad3fb61
Change order of functions.
nojaf Apr 4, 2023
c20267b
Merge branch 'main' into typar-name-signature-data
nojaf Apr 4, 2023
23a0ef5
Merge branch 'main' into typar-name-signature-data
nojaf Apr 5, 2023
b2979a8
Merge branch 'main' into typar-name-signature-data
nojaf Apr 5, 2023
b2ba853
Merge branch 'main' into typar-name-signature-data
nojaf Apr 6, 2023
ae5fd7f
Merge branch 'main' into typar-name-signature-data
nojaf Apr 7, 2023
cbde066
Extract AssignPrettyTyparNames
nojaf Apr 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/Compiler/Checking/CheckDeclarations.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5535,5 +5535,7 @@ let CheckOneSigFile (g, amap, thisCcu, checkForErrors, conditionalDefines, tcSin
FinalTypeDefinitionChecksAtEndOfInferenceScope(cenv.infoReader, tcEnv.NameEnv, cenv.tcSink, false, tcEnv.DisplayEnv, tycon))
with exn -> errorRecovery exn sigFile.QualifiedName.Range

UpdatePrettyTyparNames.updateModuleOrNamespaceType sigFileType

return (tcEnv, sigFileType, cenv.createsGeneratedProvidedTypes)
}
5 changes: 2 additions & 3 deletions src/Compiler/Checking/PostInferenceChecks.fs
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,7 @@ let BindTypars g env (tps: Typar list) =
if isNil tps then env else
// Here we mutate to provide better names for generalized type parameters
let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) env.boundTyparNames tps
(tps, nms) ||> List.iter2 (fun tp nm ->
if PrettyTypes.NeedsPrettyTyparName tp then
tp.typar_id <- ident (nm, tp.Range))
PrettyTypes.AssignPrettyTyparNames tps nms
List.fold BindTypar env tps

/// Set the set of vals which are arguments in the active lambda. We are allowed to return
Expand Down Expand Up @@ -2597,6 +2595,7 @@ and CheckModuleSpec cenv env mbind =
let CheckImplFileContents cenv env implFileTy implFileContents =
let rpi, mhi = ComputeRemappingFromImplementationToSignature cenv.g implFileContents implFileTy
let env = { env with sigToImplRemapInfo = (mkRepackageRemapping rpi, mhi) :: env.sigToImplRemapInfo }
UpdatePrettyTyparNames.updateModuleOrNamespaceType implFileTy
CheckDefnInModule cenv env implFileContents

let CheckImplFile (g, amap, reportErrors, infoReader, internalsVisibleToPaths, viewCcu, tcValF, denv, implFileTy, implFileContents, extraAttribs, isLastCompiland: bool*bool, isInternalTestSpanStackReferring) =
Expand Down
2 changes: 1 addition & 1 deletion src/Compiler/Driver/ParseAndCheckInputs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1783,7 +1783,7 @@ let CheckClosedInputSet (ctok, checkForErrors, tcConfig: TcConfig, tcImports, tc
// tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions
let results, tcState =
match tcConfig.typeCheckingConfig.Mode with
| TypeCheckingMode.Graph when (not tcConfig.isInteractive && not tcConfig.deterministic) ->
| TypeCheckingMode.Graph when (not tcConfig.isInteractive) ->
CheckMultipleInputsUsingGraphMode(
ctok,
checkForErrors,
Expand Down
2 changes: 2 additions & 0 deletions src/Compiler/FSharp.Compiler.Service.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,8 @@
<Compile Include="TypedTree\TypedTreeOps.fs" />
<Compile Include="TypedTree\TypedTreePickle.fsi" />
<Compile Include="TypedTree\TypedTreePickle.fs" />
<Compile Include="TypedTree\UpdatePrettyTyparNames.fsi" />
<Compile Include="TypedTree\UpdatePrettyTyparNames.fs" />
<Compile Include="Checking\import.fsi" />
<Compile Include="Checking\import.fs" />
<Compile Include="Checking\TypeHierarchy.fsi" />
Expand Down
4 changes: 1 addition & 3 deletions src/Compiler/Optimize/Optimizer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,7 @@ let BindTyparsToUnknown (tps: Typar list) env =
// However here we mutate to provide better names for generalized type parameters
// The names chosen are 'a', 'b' etc. These are also the compiled names in the IL code
let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) (env.typarInfos |> List.map (fun (tp, _) -> tp.Name) ) tps
(tps, nms) ||> List.iter2 (fun tp nm ->
if PrettyTypes.NeedsPrettyTyparName tp then
tp.typar_id <- ident (nm, tp.Range))
PrettyTypes.AssignPrettyTyparNames tps nms
List.fold (fun sofar arg -> BindTypar arg UnknownTypeValue sofar) env tps

let BindCcu (ccu: CcuThunk) mval env (_g: TcGlobals) =
Expand Down
6 changes: 6 additions & 0 deletions src/Compiler/TypedTree/TypedTreeOps.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2841,6 +2841,12 @@ module PrettyTypes =

choose tps (0, 0) []

let AssignPrettyTyparNames typars prettyNames =
(typars, prettyNames)
||> List.iter2 (fun tp nm ->
if NeedsPrettyTyparName tp then
tp.typar_id <- ident (nm, tp.Range))

let PrettifyThings g foldTys mapTys things =
let ftps = foldTys (accFreeInTypeLeftToRight g true false) emptyFreeTyparsLeftToRight things
let ftps = List.rev ftps
Expand Down
3 changes: 3 additions & 0 deletions src/Compiler/TypedTree/TypedTreeOps.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -981,6 +981,9 @@ module PrettyTypes =

val PrettyTyparNames: (Typar -> bool) -> string list -> Typars -> string list

/// Assign previously generated pretty names to typars
val AssignPrettyTyparNames: Typars -> string list -> unit

val PrettifyType: TcGlobals -> TType -> TType * TyparConstraintsWithTypars

val PrettifyInstAndTyparsAndType:
Expand Down
24 changes: 24 additions & 0 deletions src/Compiler/TypedTree/UpdatePrettyTyparNames.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/// The Typars of a Val in the signature data should also be pretty named.
/// This will happen for the implementation file contents, but not for the signature data.
/// In this module some helpers will traverse the ModuleOrNamespaceType and update all the typars of each found Val.
module internal FSharp.Compiler.UpdatePrettyTyparNames

open Internal.Utilities.Library
open FSharp.Compiler.TypedTree
open FSharp.Compiler.TypedTreeOps

let updateVal (v: Val) =
if not (List.isEmpty v.Typars) then
let nms = PrettyTypes.PrettyTyparNames (fun _ -> true) List.empty v.Typars
PrettyTypes.AssignPrettyTyparNames v.Typars nms

let rec updateEntity (entity: Entity) =
for e in entity.ModuleOrNamespaceType.AllEntities do
updateEntity e

for v in entity.ModuleOrNamespaceType.AllValsAndMembers do
updateVal v

let updateModuleOrNamespaceType (signatureData: ModuleOrNamespaceType) =
for e in signatureData.ModuleAndNamespaceDefinitions do
updateEntity e
8 changes: 8 additions & 0 deletions src/Compiler/TypedTree/UpdatePrettyTyparNames.fsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/// The Typars of a Val in the signature data should also be pretty named.
/// This will happen for the implementation file contents, but not for the signature data.
/// In this module some helpers will traverse the ModuleOrNamespaceType and update all the typars of each found Val.
module internal FSharp.Compiler.UpdatePrettyTyparNames

open FSharp.Compiler.TypedTree

val updateModuleOrNamespaceType: signatureData: ModuleOrNamespaceType -> unit
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@
<Content Include="TypeChecks\Graph\scrape.fsx" CopyToOutputDirectory="Never" />
<Compile Include="TypeChecks\Graph\CompilationFromCmdlineArgsTests.fs" />
<Compile Include="TypeChecks\Graph\TypedTreeGraph.fs" />
<Compile Include="TypeChecks\TyparNameTests.fs" />
<Compile Include="CompilerOptions\fsc\checked\checked.fs" />
<Compile Include="CompilerOptions\fsc\cliversion.fs" />
<Compile Include="CompilerOptions\fsc\codepage\codepage.fs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type Method =
let methodOptions (method: Method) =
match method with
| Method.Sequential -> []
| Method.Graph -> [ "--test:GraphBasedChecking"; "--test:DumpCheckingGraph"; "--deterministic-" ]
| Method.Graph -> [ "--test:GraphBasedChecking"; "--test:DumpCheckingGraph" ]

let withMethod (method: Method) (cu: CompilationUnit) : CompilationUnit =
match cu with
Expand Down
142 changes: 142 additions & 0 deletions tests/FSharp.Compiler.ComponentTests/TypeChecks/TyparNameTests.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
module FSharp.Compiler.ComponentTests.TypeChecks.TyparNameTests

open FSharp.Compiler.Symbols
open Xunit
open FSharp.Test
open FSharp.Test.Compiler

let private getGenericParametersNamesFor
(cUnit: CompilationUnit)
(entityDisplayName: string)
(valueDisplayName: string)
(additionalFile: SourceCodeFileKind)
: string array =
let typeCheckResult =
cUnit |> withAdditionalSourceFile additionalFile |> typecheckProject

assert (Array.isEmpty typeCheckResult.Diagnostics)

typeCheckResult.AssemblySignature.Entities
|> Seq.tryPick (fun (entity: FSharpEntity) ->
if entity.DisplayName <> entityDisplayName then
None
else
entity.MembersFunctionsAndValues
|> Seq.tryFind (fun mfv -> mfv.DisplayName = valueDisplayName)
|> Option.map (fun (mfv: FSharpMemberOrFunctionOrValue) ->
mfv.GenericParameters |> Seq.map (fun gp -> gp.DisplayName) |> Seq.toArray))
|> Option.defaultValue Array.empty

[<Fact>]
let ``The call site of a generic function should have no influence on the name of the type parameters`` () =
let definitionFile =
Fs
"""
module A

let someGenericFunction _ = ()
"""
|> withFileName "A.fs"

let usageFile =
("""
module B

let otherGenericFunction _ _ _ =
A.someGenericFunction 1
"""
|> FsSource)
.WithFileName("B.fs")

let namesForB =
getGenericParametersNamesFor definitionFile "A" "someGenericFunction" usageFile

let alternativeUsageFile =
("""
module C

let alternateGenericFunction _ =
A.someGenericFunction 1
"""
|> FsSource)
.WithFileName("C.fs")

let namesForC =
getGenericParametersNamesFor definitionFile "A" "someGenericFunction" alternativeUsageFile

Assert.Equal<string array>(namesForB, namesForC)

[<Fact>]
let ``Fixed typar name in signature file is still respected`` () =
let signatureFile =
Fsi
"""
module A

val someGenericFunction: 'x -> unit
"""
|> withFileName "A.fsi"

let implementationFile =
("""
module A

let someGenericFunction _ = ()
"""
|> FsSource)
.WithFileName("A.fs")

let names =
getGenericParametersNamesFor signatureFile "A" "someGenericFunction" implementationFile

Assert.Equal<string array>([| "x" |], names)

[<Fact>]
let ``Hash constraint typar in signature file gets pretty name`` () =
let signatureFile =
Fsi
"""
module A

val someGenericFunction: #exn list -> unit
"""
|> withFileName "A.fsi"

let implementationFile =
("""
module A

let someGenericFunction (_ : #exn list) = ()
"""
|> FsSource)
.WithFileName("A.fs")

let names =
getGenericParametersNamesFor signatureFile "A" "someGenericFunction" implementationFile

Assert.Equal<string array>([| "a" |], names)

[<Fact>]
let ``Hash constraint with generic type parameter should have pretty name`` () =
let signatureFile =
Fsi
"""
module A

val array2D: rows: seq<#seq<'T>> -> 'T[,]
"""
|> withFileName "A.fsi"

let implementationFile =
("""
module A

let array2D (rows: seq<#seq<'T>>) : 'T[,] = failwith "todo"
"""
|> FsSource)
.WithFileName("A.fs")

let names =
getGenericParametersNamesFor signatureFile "A" "array2D" implementationFile

Assert.Equal<string array>([| "a"; "T" |], names)
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, I
Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T)
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Expand Down Expand Up @@ -662,6 +661,7 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Dispose()
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg)
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start()
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception])
Expand Down Expand Up @@ -987,7 +987,7 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](Syste
Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr)
Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[a,T](System.Collections.Generic.IEnumerable`1[a])
Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item
Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item()
Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32
Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]])
Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32)
Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T)
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[])
Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[])
Expand Down Expand Up @@ -987,7 +987,7 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](Syste
Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr)
Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?])
Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[a,T](System.Collections.Generic.IEnumerable`1[a])
Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item
Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item()
Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,7 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken])
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Dispose()
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg)
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start()
Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception])
Expand Down
Loading