diff --git a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
index 9033ff771f8..34b94b5b1a1 100644
--- a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
+++ b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
@@ -1,5 +1,6 @@
### Fixed
+* Extended #help directive in fsi to show documentation in the REPL. ([PR #17140](https://github.com/dotnet/fsharp/pull/17140))
* Fix internal error when dotting into delegates with multiple type parameters. ([PR #17227](https://github.com/dotnet/fsharp/pull/17227))
* Error for partial implementation of interface with static and non-static abstract members. ([Issue #17138](https://github.com/dotnet/fsharp/issues/17138), [PR #17160](https://github.com/dotnet/fsharp/pull/17160))
* Optimize simple mappings with preludes in computed collections. ([PR #17067](https://github.com/dotnet/fsharp/pull/17067))
diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj
index 8f3285633bf..1196aa6bace 100644
--- a/src/Compiler/FSharp.Compiler.Service.fsproj
+++ b/src/Compiler/FSharp.Compiler.Service.fsproj
@@ -527,6 +527,8 @@
+
+
diff --git a/src/Compiler/Interactive/FSIstrings.txt b/src/Compiler/Interactive/FSIstrings.txt
index c357f835be5..b415dda8af1 100644
--- a/src/Compiler/Interactive/FSIstrings.txt
+++ b/src/Compiler/Interactive/FSIstrings.txt
@@ -32,6 +32,7 @@ fsiIntroPackageSourceUriInfo,"Include package source uri when searching for pack
fsiIntroTextHashloadInfo,"Load the given file(s) as if compiled and referenced"
fsiIntroTextHashtimeInfo,"Toggle timing on/off"
fsiIntroTextHashhelpInfo,"Display help"
+fsiIntroTextHashhelpdocInfo,"Display documentation for an identifier, e.g. #help \"List.map\";;"
fsiIntroTextHashquitInfo,"Exit"
fsiIntroTextHashclearInfo,"Clear screen"
fsiIntroTextHeader2commandLine," F# Interactive command line options:"
diff --git a/src/Compiler/Interactive/fsi.fs b/src/Compiler/Interactive/fsi.fs
index d932b95eda1..569ba4790b8 100644
--- a/src/Compiler/Interactive/fsi.fs
+++ b/src/Compiler/Interactive/fsi.fs
@@ -1240,6 +1240,10 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, argv: s
fsiConsoleOutput.uprintfn """ #time ["on"|"off"];; // %s""" (FSIstrings.SR.fsiIntroTextHashtimeInfo ())
fsiConsoleOutput.uprintfn """ #help;; // %s""" (FSIstrings.SR.fsiIntroTextHashhelpInfo ())
+ fsiConsoleOutput.uprintfn
+ """ #help "idn";; // %s"""
+ (FSIstrings.SR.fsiIntroTextHashhelpdocInfo ())
+
if tcConfigB.langVersion.SupportsFeature(LanguageFeature.PackageManagement) then
for msg in
dependencyProvider.GetRegisteredDependencyManagerHelpText(
@@ -2499,7 +2503,7 @@ type internal FsiDynamicCompiler
processContents newState declaredImpls
/// Evaluate the given expression and produce a new interactive state.
- member fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger: DiagnosticsLogger, istate, expr: SynExpr) =
+ member fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger: DiagnosticsLogger, istate, expr: SynExpr, suppressItPrint) =
let tcConfig = TcConfig.Create(tcConfigB, validate = false)
let itName = "it"
@@ -2513,7 +2517,7 @@ type internal FsiDynamicCompiler
// Snarf the type for 'it' via the binding
match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with
| Item.Value vref ->
- if not tcConfig.noFeedback then
+ if not tcConfig.noFeedback && not suppressItPrint then
let infoReader = InfoReader(istate.tcGlobals, istate.tcImports.GetImportMap())
valuePrinter.InvokeExprPrinter(
@@ -3724,6 +3728,31 @@ type FsiInteractionProcessor
stopProcessingRecovery e range0
None
+ let runhDirective diagnosticsLogger ctok istate source =
+ let lexbuf =
+ UnicodeLexing.StringAsLexbuf(true, tcConfigB.langVersion, tcConfigB.strictIndentation, $"<@@ {source} @@>")
+
+ let tokenizer =
+ fsiStdinLexerProvider.CreateBufferLexer("hdummy.fsx", lexbuf, diagnosticsLogger)
+
+ let parsedInteraction = ParseInteraction tokenizer
+
+ match parsedInteraction with
+ | Some(ParsedScriptInteraction.Definitions([ SynModuleDecl.Expr(e, _) ], _)) ->
+
+ let _state, status =
+ fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger, istate, e, true)
+
+ match status with
+ | Completed(Some compStatus) ->
+ match compStatus.ReflectionValue with
+ | :? FSharp.Quotations.Expr as qex ->
+ let s = FsiHelp.Logic.Quoted.h qex
+ fsiConsoleOutput.uprintf "%s" s
+ | _ -> ()
+ | _ -> ()
+ | _ -> ()
+
/// Partially process a hash directive, leaving state in packageManagerLines and required assemblies
let PartiallyProcessHashDirective (ctok, istate, hash, diagnosticsLogger: DiagnosticsLogger) =
match hash with
@@ -3820,6 +3849,10 @@ type FsiInteractionProcessor
fsiOptions.ShowHelp(m)
istate, Completed None
+ | ParsedHashDirective("help", ParsedHashDirectiveArguments [ source ], _m) ->
+ runhDirective diagnosticsLogger ctok istate source
+ istate, Completed None
+
| ParsedHashDirective(c, ParsedHashDirectiveArguments arg, m) ->
warning (Error((FSComp.SR.fsiInvalidDirective (c, String.concat " " arg)), m))
istate, Completed None
@@ -3866,7 +3899,7 @@ type FsiInteractionProcessor
| InteractionGroup.HashDirectives [] -> istate, Completed None
| InteractionGroup.Definitions([ SynModuleDecl.Expr(expr, _) ], _) ->
- fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger, istate, expr)
+ fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger, istate, expr, false)
| InteractionGroup.Definitions(defs, _) ->
fsiDynamicCompiler.EvalParsedDefinitions(ctok, diagnosticsLogger, istate, true, false, defs)
@@ -4060,7 +4093,7 @@ type FsiInteractionProcessor
|> InteractiveCatch diagnosticsLogger (fun istate ->
istate
|> mainThreadProcessAction ctok (fun ctok istate ->
- fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger, istate, expr)))
+ fsiDynamicCompiler.EvalParsedExpression(ctok, diagnosticsLogger, istate, expr, false)))
let commitResult (istate, result) =
match result with
diff --git a/src/Compiler/Interactive/fsihelp.fs b/src/Compiler/Interactive/fsihelp.fs
new file mode 100644
index 00000000000..baca58d382a
--- /dev/null
+++ b/src/Compiler/Interactive/fsihelp.fs
@@ -0,0 +1,272 @@
+module FSharp.Compiler.Interactive.FsiHelp
+
+[]
+[]
+do ()
+
+open System
+open System.Collections.Generic
+open System.IO
+open System.Text
+open System.Reflection
+open FSharp.Compiler.IO
+
+module Parser =
+
+ open System.Xml
+
+ type Help =
+ {
+ Summary: string
+ Remarks: string option
+ Parameters: (string * string) list
+ Returns: string option
+ Exceptions: (string * string) list
+ Examples: (string * string) list
+ FullName: string
+ Assembly: string
+ }
+
+ member this.ToDisplayString() =
+ let sb = StringBuilder()
+
+ let parameters =
+ this.Parameters
+ |> List.map (fun (name, description) -> sprintf "- %s: %s" name description)
+ |> String.concat "\n"
+
+ sb.AppendLine().AppendLine("Description:").AppendLine(this.Summary) |> ignore
+
+ match this.Remarks with
+ | Some r -> sb.AppendLine $"\nRemarks:\n%s{r}" |> ignore
+ | None -> ()
+
+ if not (String.IsNullOrWhiteSpace(parameters)) then
+ sb.AppendLine $"\nParameters:\n%s{parameters}" |> ignore
+
+ match this.Returns with
+ | Some r -> sb.AppendLine $"Returns:\n%s{r}" |> ignore
+ | None -> ()
+
+ if not this.Exceptions.IsEmpty then
+ sb.AppendLine "\nExceptions:" |> ignore
+
+ for (exType, exDesc) in this.Exceptions do
+ sb.AppendLine $"%s{exType}: %s{exDesc}" |> ignore
+
+ if not this.Examples.IsEmpty then
+ sb.AppendLine "\nExamples:" |> ignore
+
+ for example, desc in this.Examples do
+ sb.AppendLine example |> ignore
+
+ if not (String.IsNullOrWhiteSpace(desc)) then
+ sb.AppendLine $"""// {desc.Replace("\n", "\n// ")}""" |> ignore
+
+ sb.AppendLine "" |> ignore
+
+ sb.AppendLine $"Full name: %s{this.FullName}" |> ignore
+ sb.AppendLine $"Assembly: %s{this.Assembly}" |> ignore
+
+ sb.ToString()
+
+ let cleanupXmlContent (s: string) = s.Replace("\n ", "\n").Trim() // some stray whitespace from the XML
+
+ // remove any leading `X:` and trailing `N
+ let trimDotNet (s: string) =
+ let s = if s.Length > 2 && s[1] = ':' then s.Substring(2) else s
+ let idx = s.IndexOf('`')
+ let s = if idx > 0 then s.Substring(0, idx) else s
+ s
+
+ let xmlDocCache = Dictionary()
+
+ let tryGetXmlDocument xmlPath =
+ try
+ match xmlDocCache.TryGetValue(xmlPath) with
+ | true, value ->
+ let xmlDocument = XmlDocument()
+ xmlDocument.LoadXml(value)
+ Some xmlDocument
+ | _ ->
+ use stream = FileSystem.OpenFileForReadShim(xmlPath)
+ let rawXml = stream.ReadAllText()
+ let xmlDocument = XmlDocument()
+ xmlDocument.LoadXml(rawXml)
+ xmlDocCache.Add(xmlPath, rawXml)
+ Some xmlDocument
+ with _ ->
+ None
+
+ let getTexts (node: Xml.XmlNode) =
+ seq {
+ for child in node.ChildNodes do
+ if child.Name = "#text" then
+ yield child.Value
+
+ if child.Name = "c" then
+ yield child.InnerText
+
+ if child.Name = "see" then
+ let cref = child.Attributes.GetNamedItem("cref")
+
+ if not (isNull cref) then
+ yield cref.Value |> trimDotNet
+ }
+ |> String.concat ""
+
+ let tryMkHelp (xmlDocument: XmlDocument option) (assembly: string) (modName: string) (implName: string) (sourceName: string) =
+ let sourceName = sourceName.Replace('.', '#') // for .ctor
+ let implName = implName.Replace('.', '#') // for .ctor
+ let xmlName = $"{modName}.{implName}"
+
+ let toTry =
+ [
+ $"""/doc/members/member[contains(@name, ":{xmlName}`")]"""
+ $"""/doc/members/member[contains(@name, ":{xmlName}(")]"""
+ $"""/doc/members/member[contains(@name, ":{xmlName}")]"""
+ ]
+
+ xmlDocument
+ |> Option.bind (fun xmlDocument ->
+ seq {
+ for t in toTry do
+ let node = xmlDocument.SelectSingleNode(t)
+ if not (isNull node) then Some node else None
+ }
+ |> Seq.tryPick id)
+ |> function
+ | None -> ValueNone
+ | Some n ->
+ let summary =
+ n.SelectSingleNode("summary")
+ |> Option.ofObj
+ |> Option.map getTexts
+ |> Option.map cleanupXmlContent
+
+ let remarks =
+ n.SelectSingleNode("remarks")
+ |> Option.ofObj
+ |> Option.map getTexts
+ |> Option.map cleanupXmlContent
+
+ let parameters =
+ n.SelectNodes("param")
+ |> Seq.cast
+ |> Seq.map (fun n -> n.Attributes.GetNamedItem("name").Value.Trim(), n.InnerText.Trim())
+ |> List.ofSeq
+
+ let returns =
+ n.SelectSingleNode("returns")
+ |> Option.ofObj
+ |> Option.map (fun n -> getTexts(n).Trim())
+
+ let exceptions =
+ n.SelectNodes("exception")
+ |> Seq.cast
+ |> Seq.map (fun n ->
+ let exType = n.Attributes.GetNamedItem("cref").Value
+ let idx = exType.IndexOf(':')
+ let exType = if idx >= 0 then exType.Substring(idx + 1) else exType
+ exType.Trim(), n.InnerText.Trim())
+ |> List.ofSeq
+
+ let examples =
+ n.SelectNodes("example")
+ |> Seq.cast
+ |> Seq.map (fun n ->
+ let codeNode = n.SelectSingleNode("code")
+
+ let code =
+ if isNull codeNode then
+ ""
+ else
+ n.RemoveChild(codeNode) |> ignore
+ cleanupXmlContent codeNode.InnerText
+
+ code, cleanupXmlContent n.InnerText)
+ |> List.ofSeq
+
+ match summary with
+ | Some s ->
+ {
+ Summary = s
+ Remarks = remarks
+ Parameters = parameters
+ Returns = returns
+ Exceptions = exceptions
+ Examples = examples
+ FullName = $"{modName}.{sourceName}" // the long ident as users see it
+ Assembly = assembly
+ }
+ |> ValueSome
+ | None -> ValueNone
+
+module Expr =
+
+ open Microsoft.FSharp.Quotations.Patterns
+
+ let tryGetSourceName (methodInfo: MethodInfo) =
+ try
+ let attr = methodInfo.GetCustomAttribute()
+ Some attr.SourceName
+ with _ ->
+ None
+
+ let getInfos (declaringType: Type) (sourceName: string option) (implName: string) =
+ let xmlPath = Path.ChangeExtension(declaringType.Assembly.Location, ".xml")
+ let xmlDoc = Parser.tryGetXmlDocument xmlPath
+ let assembly = Path.GetFileName(declaringType.Assembly.Location)
+
+ // for FullName cases like Microsoft.FSharp.Core.FSharpOption`1[System.Object]
+ let fullName =
+ let idx = declaringType.FullName.IndexOf('[')
+
+ if idx >= 0 then
+ declaringType.FullName.Substring(0, idx)
+ else
+ declaringType.FullName
+
+ let fullName = fullName.Replace('+', '.') // for FullName cases like Microsoft.FSharp.Collections.ArrayModule+Parallel
+
+ (xmlDoc, assembly, fullName, implName, sourceName |> Option.defaultValue implName)
+
+ let rec exprNames expr =
+ match expr with
+ | Call(exprOpt, methodInfo, _exprList) ->
+ match exprOpt with
+ | Some _ -> None
+ | None ->
+ let sourceName = tryGetSourceName methodInfo
+ getInfos methodInfo.DeclaringType sourceName methodInfo.Name |> Some
+ | Lambda(_param, body) -> exprNames body
+ | Let(_, _, body) -> exprNames body
+ | Value(_o, t) -> getInfos t (Some t.Name) t.Name |> Some
+ | DefaultValue t -> getInfos t (Some t.Name) t.Name |> Some
+ | PropertyGet(_o, info, _) -> getInfos info.DeclaringType (Some info.Name) info.Name |> Some
+ | NewUnionCase(info, _exprList) -> getInfos info.DeclaringType (Some info.Name) info.Name |> Some
+ | NewObject(ctorInfo, _e) -> getInfos ctorInfo.DeclaringType (Some ctorInfo.Name) ctorInfo.Name |> Some
+ | NewArray(t, _exprs) -> getInfos t (Some t.Name) t.Name |> Some
+ | NewTuple _ ->
+ let ty = typeof<_ * _>
+ getInfos ty (Some ty.Name) ty.Name |> Some
+ | NewStructTuple _ ->
+ let ty = typeof
+ getInfos ty (Some ty.Name) ty.Name |> Some
+ | _ -> None
+
+module Logic =
+
+ open Expr
+ open Parser
+
+ module Quoted =
+ let tryGetHelp (expr: Quotations.Expr) =
+ match exprNames expr with
+ | Some(xmlDocument, assembly, modName, implName, sourceName) -> tryMkHelp xmlDocument assembly modName implName sourceName
+ | _ -> ValueNone
+
+ let h (expr: Quotations.Expr) =
+ match tryGetHelp expr with
+ | ValueNone -> "unable to get documentation\n"
+ | ValueSome d -> d.ToDisplayString()
diff --git a/src/Compiler/Interactive/fsihelp.fsi b/src/Compiler/Interactive/fsihelp.fsi
new file mode 100644
index 00000000000..34b8691c3f9
--- /dev/null
+++ b/src/Compiler/Interactive/fsihelp.fsi
@@ -0,0 +1,23 @@
+module FSharp.Compiler.Interactive.FsiHelp
+
+module Parser =
+
+ type Help =
+ { Summary: string
+ Remarks: string option
+ Parameters: (string * string) list
+ Returns: string option
+ Exceptions: (string * string) list
+ Examples: (string * string) list
+ FullName: string
+ Assembly: string }
+
+ member ToDisplayString: unit -> string
+
+module Logic =
+
+ module Quoted =
+
+ val tryGetHelp: expr: Quotations.Expr -> Parser.Help voption
+
+ val h: expr: Quotations.Expr -> string
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf
index 97dcca71c4c..9146a0d2aa0 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.cs.xlf
@@ -17,6 +17,11 @@
Vymazat obrazovku
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorOperaci nešlo dokončit z důvodu dřívější chyby.
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf
index a3d73b0e675..ba8a2a310cb 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.de.xlf
@@ -17,6 +17,11 @@
Bildschirm löschen
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorDer Vorgang konnte aufgrund eines vorherigen Fehlers nicht abgeschlossen werden.
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf
index 190ff245baa..f499bc3eafa 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.es.xlf
@@ -17,6 +17,11 @@
Borrar pantalla
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorLa operación no se pudo completar debido a un error anterior
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf
index 38d7a20d8e9..816e9ff898f 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.fr.xlf
@@ -17,6 +17,11 @@
Effacer l'écran
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorImpossible d'exécuter l'opération en raison d'une erreur antérieure
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf
index 9c916837e52..93fa31ffda4 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.it.xlf
@@ -17,6 +17,11 @@
Cancella schermata
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorNon è stato possibile completare l'operazione a causa di un errore precedente
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf
index eab626f267e..316b88cfd0d 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ja.xlf
@@ -17,6 +17,11 @@
画面をクリアする
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier error以前のエラーが原因で操作を完了できませんでした
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf
index be891b98188..e577610033a 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ko.xlf
@@ -17,6 +17,11 @@
화면 지우기
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier error이전 오류로 인해 작업을 완료할 수 없습니다.
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf
index 58adec37da4..b1b3cd575f0 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.pl.xlf
@@ -17,6 +17,11 @@
Wyczyść ekran
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorNie udało się ukończyć operacji z powodu wcześniejszego błędu
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf
index b080a196f7c..d6607b63a13 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.pt-BR.xlf
@@ -17,6 +17,11 @@
Limpar tela
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorNão foi possível concluir a operação devido a um erro anterior
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf
index e46822530d8..62ba1c091a2 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.ru.xlf
@@ -17,6 +17,11 @@
Очистить экран
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorОперация не может быть завершена из-за предыдущей ошибки
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf
index 3222a474ef5..d1d67300f2c 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.tr.xlf
@@ -17,6 +17,11 @@
Ekranı temizle
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier errorÖnceki hata nedeniyle işlem tamamlanamadı
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf
index de485cc5361..1657fe4f304 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hans.xlf
@@ -17,6 +17,11 @@
清除屏幕
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier error由于早期错误,无法完成操作
diff --git a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf
index 9348019132b..0950c95bcee 100644
--- a/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf
+++ b/src/Compiler/Interactive/xlf/FSIstrings.txt.zh-Hant.xlf
@@ -17,6 +17,11 @@
清空螢幕
+
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+ Display documentation for an identifier, e.g. #help \"List.map\";;
+
+ Operation could not be completed due to earlier error因為先前發生錯誤,所以無法完成作業
diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs
index 2fc5366eeed..19c3009b17a 100644
--- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs
+++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs
@@ -719,6 +719,7 @@ x |> Seq.iter(fun r ->
""" #time ["on"|"off"];; // Toggle timing on/off"""
""" #clear;; // Clear screen"""
""" #help;; // Display help"""
+ """ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;"""
""" #quit;; // Exit"""
""""""
""" F# Interactive command line options:"""
@@ -766,6 +767,7 @@ x |> Seq.iter(fun r ->
""" #load "file.fs" ...;; // Load the given file(s) as if compiled and referenced"""
""" #time ["on"|"off"];; // Toggle timing on/off"""
""" #help;; // Display help"""
+ """ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;"""
""" #r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'"""
""" #r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version"""
""" #clear;; // Clear screen"""
diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl
index 909e42e2cdc..447ebd82026 100644
--- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl
+++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.debug.bsl
@@ -4597,6 +4597,40 @@ FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService: Void Interrupt()
FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService: Void Run()
FSharp.Compiler.Interactive.CtrlBreakHandlers: FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakClient
FSharp.Compiler.Interactive.CtrlBreakHandlers: FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService
+FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted: Microsoft.FSharp.Core.FSharpValueOption`1[FSharp.Compiler.Interactive.FsiHelp+Parser+Help] tryGetHelp(Microsoft.FSharp.Quotations.FSharpExpr)
+FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted: System.String h(Microsoft.FSharp.Quotations.FSharpExpr)
+FSharp.Compiler.Interactive.FsiHelp+Logic: FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(Help)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(Help, System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(System.Object)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(System.Object, System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(Help)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(System.Object)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(System.Object, System.Collections.IComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 GetHashCode()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 GetHashCode(System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Examples
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Exceptions
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Parameters
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Examples()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Exceptions()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Parameters()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] Remarks
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] Returns
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Remarks()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Returns()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String Assembly
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String FullName
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String Summary
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String ToDisplayString()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String ToString()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_Assembly()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_FullName()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_Summary()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], System.String, System.String)
+FSharp.Compiler.Interactive.FsiHelp+Parser: FSharp.Compiler.Interactive.FsiHelp+Parser+Help
+FSharp.Compiler.Interactive.FsiHelp: FSharp.Compiler.Interactive.FsiHelp+Logic
+FSharp.Compiler.Interactive.FsiHelp: FSharp.Compiler.Interactive.FsiHelp+Parser
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanRead
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanSeek
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanWrite
diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl
index 909e42e2cdc..447ebd82026 100644
--- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl
+++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.release.bsl
@@ -4597,6 +4597,40 @@ FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService: Void Interrupt()
FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService: Void Run()
FSharp.Compiler.Interactive.CtrlBreakHandlers: FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakClient
FSharp.Compiler.Interactive.CtrlBreakHandlers: FSharp.Compiler.Interactive.CtrlBreakHandlers+CtrlBreakService
+FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted: Microsoft.FSharp.Core.FSharpValueOption`1[FSharp.Compiler.Interactive.FsiHelp+Parser+Help] tryGetHelp(Microsoft.FSharp.Quotations.FSharpExpr)
+FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted: System.String h(Microsoft.FSharp.Quotations.FSharpExpr)
+FSharp.Compiler.Interactive.FsiHelp+Logic: FSharp.Compiler.Interactive.FsiHelp+Logic+Quoted
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(Help)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(Help, System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(System.Object)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Boolean Equals(System.Object, System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(Help)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(System.Object)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 CompareTo(System.Object, System.Collections.IComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 GetHashCode()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Int32 GetHashCode(System.Collections.IEqualityComparer)
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Examples
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Exceptions
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] Parameters
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Examples()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Exceptions()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_Parameters()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] Remarks
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] Returns
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Remarks()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Returns()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String Assembly
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String FullName
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String Summary
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String ToDisplayString()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String ToString()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_Assembly()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_FullName()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: System.String get_Summary()
+FSharp.Compiler.Interactive.FsiHelp+Parser+Help: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], System.String, System.String)
+FSharp.Compiler.Interactive.FsiHelp+Parser: FSharp.Compiler.Interactive.FsiHelp+Parser+Help
+FSharp.Compiler.Interactive.FsiHelp: FSharp.Compiler.Interactive.FsiHelp+Logic
+FSharp.Compiler.Interactive.FsiHelp: FSharp.Compiler.Interactive.FsiHelp+Parser
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanRead
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanSeek
FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanWrite
diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
index 463c87514f5..d0af2696e3b 100644
--- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
+++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj
@@ -60,6 +60,7 @@
+
diff --git a/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs b/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs
new file mode 100644
index 00000000000..d17b3421ed9
--- /dev/null
+++ b/tests/FSharp.Compiler.Service.Tests/FsiHelpTests.fs
@@ -0,0 +1,54 @@
+namespace FSharp.Compiler.UnitTests
+
+open FSharp.Test.Assert
+open Xunit
+
+[]
+module FsiHelpTests =
+
+ []
+ let ``Can get help for FSharp.Compiler.Xml.PreXmlDoc.Create`` () =
+ match FSharp.Compiler.Interactive.FsiHelp.Logic.Quoted.tryGetHelp <@ FSharp.Compiler.Xml.PreXmlDoc.Create @> with
+ | ValueSome h ->
+ h.Assembly |> shouldBe "FSharp.Compiler.Service.dll"
+ h.FullName |> shouldBe "FSharp.Compiler.Xml.PreXmlDoc.Create"
+
+ h.Summary
+ |> shouldBe "Create a PreXmlDoc from a collection of unprocessed lines"
+ | ValueNone -> Assert.True(false, "No xml documentation found")
+
+ []
+ let ``Can get help for FSharp.Compiler.Syntax.SyntaxNodes.tryPickLast`` () =
+ match FSharp.Compiler.Interactive.FsiHelp.Logic.Quoted.tryGetHelp <@ FSharp.Compiler.Syntax.SyntaxNodes.tryPickLast @> with
+ | ValueSome h ->
+ h.Assembly |> shouldBe "FSharp.Compiler.Service.dll"
+ h.FullName |> shouldBe "FSharp.Compiler.Syntax.SyntaxNodesModule.tryPickLast"
+ Assert.StartsWith("Applies the given function to each node of the AST and ", h.Summary)
+ h.Parameters |> shouldNotBeEmpty
+ h.Returns.IsSome |> shouldBeTrue
+ h.Examples |> shouldNotBeEmpty
+ | ValueNone -> Assert.True(false, "No xml documentation found")
+
+ []
+ let ``Can get help for FSComp.SR.considerUpcast`` () =
+ match FSharp.Compiler.Interactive.FsiHelp.Logic.Quoted.tryGetHelp <@ FSComp.SR.considerUpcast @> with
+ | ValueSome h ->
+ h.Assembly |> shouldBe "FSharp.Compiler.Service.dll"
+ h.FullName |> shouldBe "FSComp.SR.considerUpcast"
+ Assert.StartsWith("The conversion from %s to %s is a compile-time safe upcast", h.Summary)
+ | ValueNone -> Assert.True(false, "No xml documentation found")
+
+ []
+ let ``Can get help for FSharp.Test.ReflectionHelper.shouldn't`` () =
+ match FSharp.Compiler.Interactive.FsiHelp.Logic.Quoted.tryGetHelp <@ FSharp.Test.ReflectionHelper.shouldn't @> with
+ | ValueSome h ->
+ h.Assembly |> shouldBe "FSharp.Test.Utilities.dll"
+ h.FullName |> shouldBe "FSharp.Test.ReflectionHelper.shouldn't"
+ Assert.StartsWith("Assert that function f ", h.Summary)
+ | ValueNone -> Assert.True(false, "No xml documentation found")
+
+ []
+ let ``Can't get help for non-identifier`` () =
+ match FSharp.Compiler.Interactive.FsiHelp.Logic.Quoted.tryGetHelp <@ 23 @> with
+ | ValueSome h -> Assert.True(false, "No xml documentation expected")
+ | ValueNone -> ()
diff --git a/tests/fsharp/core/printing/output.1000.stderr.bsl b/tests/fsharp/core/printing/output.1000.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.1000.stderr.bsl
+++ b/tests/fsharp/core/printing/output.1000.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.1000.stdout.bsl b/tests/fsharp/core/printing/output.1000.stdout.bsl
index ddde159fd6b..f780a746484 100644
--- a/tests/fsharp/core/printing/output.1000.stdout.bsl
+++ b/tests/fsharp/core/printing/output.1000.stdout.bsl
@@ -1101,6 +1101,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'
#r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version
#clear;; // Clear screen
@@ -1110,6 +1111,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -1494,8 +1516,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0091+Test4343e+C, FSI_0091+Test4343e+C,
- [FSI_0091+Test4343e+C; FSI_0091+Test4343e+C])
+ (FSI_0093+Test4343e+C, FSI_0093+Test4343e+C,
+ [FSI_0093+Test4343e+C; FSI_0093+Test4343e+C])
type D =
new: x: int -> D
override ToString: unit -> string
@@ -1508,8 +1530,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0091+Test4343e+C, FSI_0091+Test4343e+C,
- [FSI_0091+Test4343e+C; FSI_0091+Test4343e+C])
+ (FSI_0093+Test4343e+C, FSI_0093+Test4343e+C,
+ [FSI_0093+Test4343e+C; FSI_0093+Test4343e+C])
type D<'a> =
new: x: 'a -> D<'a>
override ToString: unit -> string
@@ -1684,7 +1706,7 @@ module Regression5218 =
type Regression4469 =
new: unit -> Regression4469
member ToString: unit -> string
-val r4469: Regression4469 = FSI_0107+Regression4469
+val r4469: Regression4469 = FSI_0109+Regression4469
val it: unit = ()
> Expect ABC = ABC
@@ -2764,7 +2786,7 @@ val ShortName: string = "hi"
> val list2: int list = [1]
-module FSI_0317.
+module FSI_0319.
A8a951db8294f99e95ae1d276a7ddaefd93d1548e6bf749bdeae55d2649682b3
{"ImmutableField0":6}
@@ -2786,7 +2808,7 @@ val it: unit = ()
> val it: {| AnonRecordField2: int |} = { AnonRecordField2 = 11 }
-module FSI_0324.Project.fsproj
+module FSI_0326.Project.fsproj
type R3 =
{ ImmutableField3: int }
diff --git a/tests/fsharp/core/printing/output.200.stderr.bsl b/tests/fsharp/core/printing/output.200.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.200.stderr.bsl
+++ b/tests/fsharp/core/printing/output.200.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.200.stdout.bsl b/tests/fsharp/core/printing/output.200.stdout.bsl
index 89f13b2b05f..fdf12045d2d 100644
--- a/tests/fsharp/core/printing/output.200.stdout.bsl
+++ b/tests/fsharp/core/printing/output.200.stdout.bsl
@@ -421,6 +421,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'
#r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version
#clear;; // Clear screen
@@ -430,6 +431,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -739,8 +761,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0091+Test4343e+C, FSI_0091+Test4343e+C,
- [FSI_0091+Test4343e+C; FSI_0091+Test4343e+C])
+ (FSI_0093+Test4343e+C, FSI_0093+Test4343e+C,
+ [FSI_0093+Test4343e+C; FSI_0093+Test4343e+C])
type D =
new: x: int -> D
override ToString: unit -> string
@@ -753,8 +775,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0091+Test4343e+C, FSI_0091+Test4343e+C,
- [FSI_0091+Test4343e+C; FSI_0091+Test4343e+C])
+ (FSI_0093+Test4343e+C, FSI_0093+Test4343e+C,
+ [FSI_0093+Test4343e+C; FSI_0093+Test4343e+C])
type D<'a> =
new: x: 'a -> D<'a>
override ToString: unit -> string
@@ -929,7 +951,7 @@ module Regression5218 =
type Regression4469 =
new: unit -> Regression4469
member ToString: unit -> string
-val r4469: Regression4469 = FSI_0107+Regression4469
+val r4469: Regression4469 = FSI_0109+Regression4469
val it: unit = ()
> Expect ABC = ABC
@@ -2009,7 +2031,7 @@ val ShortName: string = "hi"
> val list2: int list = [1]
-module FSI_0317.
+module FSI_0319.
A8a951db8294f99e95ae1d276a7ddaefd93d1548e6bf749bdeae55d2649682b3
{"ImmutableField0":6}
@@ -2031,7 +2053,7 @@ val it: unit = ()
> val it: {| AnonRecordField2: int |} = { AnonRecordField2 = 11 }
-module FSI_0324.Project.fsproj
+module FSI_0326.Project.fsproj
type R3 =
{ ImmutableField3: int }
diff --git a/tests/fsharp/core/printing/output.47.stderr.bsl b/tests/fsharp/core/printing/output.47.stderr.bsl
index 3e98bca2fc4..7ea9b2e9f1b 100644
--- a/tests/fsharp/core/printing/output.47.stderr.bsl
+++ b/tests/fsharp/core/printing/output.47.stderr.bsl
@@ -2,443 +2,443 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
#r "nuget:Newtonsoft.Json, 13.0.1"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-stdin(1117,1): error FS3302: The 'package management' feature requires language version 5.0 or above
+stdin(1119,1): error FS3302: The 'package management' feature requires language version 5.0 or above
JsonConvert.SerializeObject { ImmutableField0 = 7 }
^^^^^^^^^^^
-stdin(1122,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
+stdin(1124,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
JsonConvert.SerializeObject { MutableField1 = 8 } |> printfn "%s";;
^^^^^^^^^^^
-stdin(1126,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
+stdin(1128,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
JsonConvert.SerializeObject { MutableField1 = 9 }
^^^^^^^^^^^
-stdin(1128,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
+stdin(1130,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
JsonConvert.SerializeObject {| AnonRecordField2 = 10 |} |> printfn "%s";;
^^^^^^^^^^^
-stdin(1131,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
+stdin(1133,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
JsonConvert.SerializeObject {| AnonRecordField2 = 11 |}
^^^^^^^^^^^
-stdin(1133,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
+stdin(1135,1): error FS0039: The value, namespace, type or module 'JsonConvert' is not defined.
#r "nuget: System.Text.Json"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-stdin(1136,1): error FS3302: The 'package management' feature requires language version 5.0 or above
+stdin(1138,1): error FS3302: The 'package management' feature requires language version 5.0 or above
let test3b = JsonSerializer.Deserialize test3a;;
-------------^^^^^^^^^^^^^^
-stdin(1140,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1142,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test3c = JsonSerializer.Serialize { ImmutableField3 = 13 };;
-------------^^^^^^^^^^^^^^
-stdin(1141,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1143,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test3d = JsonSerializer.Deserialize test3c;;
-------------^^^^^^^^^^^^^^
-stdin(1142,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1144,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test4a = JsonSerializer.Serialize { MutableField4 = 15 };;
-------------^^^^^^^^^^^^^^
-stdin(1145,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1147,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test4b = JsonSerializer.Deserialize test4a;;
-------------^^^^^^^^^^^^^^
-stdin(1146,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1148,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test4c = JsonSerializer.Serialize { MutableField4 = 16 };;
-------------^^^^^^^^^^^^^^
-stdin(1147,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1149,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test4d = JsonSerializer.Deserialize test4c;;
-------------^^^^^^^^^^^^^^
-stdin(1148,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1150,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test5a = JsonSerializer.Serialize {| AnonRecordField5 = 17 |};;
-------------^^^^^^^^^^^^^^
-stdin(1151,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1153,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test5b = JsonSerializer.Deserialize test5a;;
-------------^^^^^^^^^^^^^^
-stdin(1152,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1154,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test5c = JsonSerializer.Serialize {| AnonRecordField5 = 18 |};;
-------------^^^^^^^^^^^^^^
-stdin(1153,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1155,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
let test5d = JsonSerializer.Deserialize test5c;;
-------------^^^^^^^^^^^^^^
-stdin(1154,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
+stdin(1156,14): error FS0039: The value, namespace, type or module 'JsonSerializer' is not defined.
diff --git a/tests/fsharp/core/printing/output.47.stdout.bsl b/tests/fsharp/core/printing/output.47.stdout.bsl
index 37a93c6fe8e..088a6f21e4e 100644
--- a/tests/fsharp/core/printing/output.47.stdout.bsl
+++ b/tests/fsharp/core/printing/output.47.stdout.bsl
@@ -4060,6 +4060,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#clear;; // Clear screen
#quit;; // Exit
@@ -4067,6 +4068,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -5039,8 +5061,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D =
new: x: int -> D
override ToString: unit -> string
@@ -5053,8 +5075,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D<'a> =
new: x: 'a -> D<'a>
override ToString: unit -> string
@@ -5229,7 +5251,7 @@ module Regression5218 =
type Regression4469 =
new: unit -> Regression4469
member ToString: unit -> string
-val r4469: Regression4469 = FSI_0106+Regression4469
+val r4469: Regression4469 = FSI_0108+Regression4469
val it: unit = ()
> Expect ABC = ABC
diff --git a/tests/fsharp/core/printing/output.multiemit.stderr.bsl b/tests/fsharp/core/printing/output.multiemit.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.multiemit.stderr.bsl
+++ b/tests/fsharp/core/printing/output.multiemit.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.multiemit.stdout.bsl b/tests/fsharp/core/printing/output.multiemit.stdout.bsl
index ceb7d3d69a3..b2af7d4f2dc 100644
--- a/tests/fsharp/core/printing/output.multiemit.stdout.bsl
+++ b/tests/fsharp/core/printing/output.multiemit.stdout.bsl
@@ -4060,6 +4060,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'
#r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version
#clear;; // Clear screen
@@ -4069,6 +4070,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -5041,8 +5063,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D =
new: x: int -> D
override ToString: unit -> string
@@ -5055,8 +5077,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D<'a> =
new: x: 'a -> D<'a>
override ToString: unit -> string
@@ -5231,7 +5253,7 @@ module Regression5218 =
type Regression4469 =
new: unit -> Regression4469
member ToString: unit -> string
-val r4469: Regression4469 = FSI_0106+Regression4469
+val r4469: Regression4469 = FSI_0108+Regression4469
val it: unit = ()
> Expect ABC = ABC
@@ -6311,7 +6333,7 @@ val ShortName: string = "hi"
> val list2: int list = [1]
-module FSI_0316.
+module FSI_0318.
A8a951db8294f99e95ae1d276a7ddaefd93d1548e6bf749bdeae55d2649682b3
{"ImmutableField0":6}
@@ -6333,7 +6355,7 @@ val it: unit = ()
> val it: {| AnonRecordField2: int |} = { AnonRecordField2 = 11 }
-module FSI_0323.Project.fsproj
+module FSI_0325.Project.fsproj
type R3 =
{ ImmutableField3: int }
diff --git a/tests/fsharp/core/printing/output.off.stderr.bsl b/tests/fsharp/core/printing/output.off.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.off.stderr.bsl
+++ b/tests/fsharp/core/printing/output.off.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.off.stdout.bsl b/tests/fsharp/core/printing/output.off.stdout.bsl
index 64444ac405b..56edaec8d22 100644
--- a/tests/fsharp/core/printing/output.off.stdout.bsl
+++ b/tests/fsharp/core/printing/output.off.stdout.bsl
@@ -248,6 +248,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'
#r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version
#clear;; // Clear screen
@@ -257,6 +258,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -1778,7 +1800,7 @@ val ShortName: string = "hi"
> val list2: int list
-module FSI_0317.
+module FSI_0319.
A8a951db8294f99e95ae1d276a7ddaefd93d1548e6bf749bdeae55d2649682b3
{"ImmutableField0":6}
@@ -1800,7 +1822,7 @@ val it: unit = ()
> val it: {| AnonRecordField2: int |} = { AnonRecordField2 = 11 }
-module FSI_0324.Project.fsproj
+module FSI_0326.Project.fsproj
type R3 =
{ ImmutableField3: int }
diff --git a/tests/fsharp/core/printing/output.quiet.stderr.bsl b/tests/fsharp/core/printing/output.quiet.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.quiet.stderr.bsl
+++ b/tests/fsharp/core/printing/output.quiet.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.stderr.bsl b/tests/fsharp/core/printing/output.stderr.bsl
index 6926dcc9f34..dae4463d4db 100644
--- a/tests/fsharp/core/printing/output.stderr.bsl
+++ b/tests/fsharp/core/printing/output.stderr.bsl
@@ -2,347 +2,347 @@
#blaaaaaa // blaaaaaa is not a known command;;
^^^^^^^^^
-stdin(219,1): warning FS3353: Invalid directive '#blaaaaaa '
+stdin(221,1): warning FS3353: Invalid directive '#blaaaaaa '
type Regression4319_T0 = static member (+-+-+) = "0 arguments";;
-----------------------------------------^^^^^
-stdin(571,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(573,42): warning FS1172: Infix operator member '+-+-+' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1 = static member (+-+-+) x = "1 argument";;
-----------------------------------------^^^^^
-stdin(572,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1b = static member (+-+-+) (x) = "1 (argument) [brackets make no diff]";;
-----------------------------------------^^^^^
-stdin(573,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1c = static member (+-+-+) x = let a,b = x in "1 argument, tuple typed from RHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(574,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(576,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T1d = static member (+-+-+) (x:int*int) = "1 argument, tuple typed from LHS. Still not OK";;
-----------------------------------------^^^^^
-stdin(575,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_T3 = static member (+-+-+) (x,y,z) = "3 arguments";;
-----------------------------------------^^^^^
-stdin(577,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1 = static member (+-+-+) x moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(578,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 1 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U1b = static member (+-+-+) (x) moreArgs = "1 (argument) [brackets make no diff] and further args";;
-----------------------------------------^^^^^
-stdin(579,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U2 = static member (+-+-+) (x,y) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(580,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(582,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1173: Infix operator member '+-+-+' has 3 initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
type Regression4319_U3 = static member (+-+-+) (x,y,z) moreArgs = "1 argument and further args";;
-----------------------------------------^^^^^
-stdin(581,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(583,42): warning FS1174: Infix operator member '+-+-+' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(586,20): warning FS1172: Infix operator member ':=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (:=) = "COLON_EQUALS"
-------------------^^
-stdin(584,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(586,20): warning FS0086: The name '(:=)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(590,20): warning FS1172: Infix operator member '&' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (&) = "AMP"
-------------------^
-stdin(588,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
+stdin(590,20): warning FS0086: The name '(&)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name 'op_Amp' instead.
static member (&^) = "AMP_AMP"
-------------------^^
-stdin(589,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(591,20): warning FS1172: Infix operator member '&^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(592,20): warning FS1172: Infix operator member '=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (=) = "EQUALS"
-------------------^
-stdin(590,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
+stdin(592,20): warning FS0086: The name '(=)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name 'op_Equality' instead.
static member (!=) = "INFIX_COMPARE_OP"
-------------------^^
-stdin(592,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(594,20): warning FS1172: Infix operator member '!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(596,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(598,20): warning FS1172: Infix operator member '...=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...!=) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^^
-stdin(597,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(599,20): warning FS1172: Infix operator member '...!=' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...<) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(598,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(600,20): warning FS1172: Infix operator member '...<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...>) = "INFIX_COMPARE_OP" // with $. prefix
-------------------^^^^
-stdin(599,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(601,20): warning FS1172: Infix operator member '...>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ($) = "DOLLAR"
-------------------^
-stdin(601,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(603,20): warning FS1172: Infix operator member '$' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(604,20): warning FS1172: Infix operator member '<' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (<) = "LESS"
-------------------^
-stdin(602,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
+stdin(604,20): warning FS0086: The name '(<)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_LessThan' instead.
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(605,20): warning FS1172: Infix operator member '>' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (>) = "GREATER"
-------------------^
-stdin(603,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
+stdin(605,20): warning FS0086: The name '(>)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name 'op_GreaterThan' instead.
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(606,20): warning FS1172: Infix operator member '@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (@) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(604,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(606,20): warning FS0086: The name '(@)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(607,20): warning FS1172: Infix operator member '^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (^) = "INFIX_AT_HAT_OP"
-------------------^
-stdin(605,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
+stdin(607,20): warning FS0086: The name '(^)' should not be used as a member name because it is given a standard definition in the F# library over fixed types
static member (...@) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(606,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(608,20): warning FS1172: Infix operator member '...@' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (...^) = "INFIX_AT_HAT_OP" // with $. prefix
-------------------^^^^
-stdin(607,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(609,20): warning FS1172: Infix operator member '...^' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (%) = "PERCENT_OP"
-------------------^
-stdin(608,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(610,20): warning FS1172: Infix operator member '%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (-) = "MINUS"
-------------------^
-stdin(610,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(612,20): warning FS1172: Infix operator member '-' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( * ) = "STAR"
--------------------^
-stdin(611,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(613,21): warning FS1172: Infix operator member '*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member (/) = "INFIX_STAR_DIV_MOD_OP"
-------------------^
-stdin(613,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(615,20): warning FS1172: Infix operator member '/' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...* ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(615,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(617,21): warning FS1172: Infix operator member '...*' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( .../ ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(616,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(618,21): warning FS1172: Infix operator member '.../' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ...% ) = "INFIX_STAR_DIV_MOD_OP" // with $. prefix
--------------------^^^^
-stdin(617,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(619,21): warning FS1172: Infix operator member '...%' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
static member ( ** ) = "INFIX_STAR_STAR_OP"
--------------------^^
-stdin(618,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
+stdin(620,21): warning FS1172: Infix operator member '**' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ...
member this.ToString() = "ABC"
----------------^^^^^^^^
-stdin(623,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
+stdin(625,17): warning FS0864: This new member hides the abstract member 'System.Object.ToString() : string'. Rename the member or use 'override' instead.
let x,f = it, (fun () -> !it);; // this will read from the static storage for 'it'
-------------------------^
-stdin(643,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
+stdin(645,26): info FS3370: The use of '!' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change '!cell' to 'cell.Value'.
x := 3;;
--^^
-stdin(645,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
+stdin(647,3): info FS3370: The use of ':=' from the F# library is deprecated. See https://aka.ms/fsharp-refcell-ops. For example, please change 'cell := expr' to 'cell.Value <- expr'.
member this.M() = "string"
----------------^
-stdin(764,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
+stdin(766,17): error FS0438: Duplicate method. The method 'M' has the same name and signature as another method in type 'ExpectDupMethod'.
member this.P = "string"
----------------^
-stdin(771,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
+stdin(773,17): error FS0438: Duplicate method. The method 'get_P' has the same name and signature as another method in type 'ExpectDupProperty'.
type public IBPublic = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^
-stdin(778,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(780,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBPublic' it is used in.
type internal IBInternal = interface inherit IAPrivate abstract Q : int end
------------------^^^^^^^^^^
-stdin(783,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
+stdin(785,19): error FS0410: The type 'IAPrivate' is less accessible than the value, member or type 'IBInternal' it is used in.
type public IBPublic = interface inherit IAInternal abstract Q : int end
------------------^^^^^^^^
-stdin(792,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
+stdin(794,19): error FS0410: The type 'IAInternal' is less accessible than the value, member or type 'IBPublic' it is used in.
override x.M(a:string) = 1
-------------------^
-stdin(824,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
+stdin(826,20): error FS0361: The override 'M: string -> int' implements more than one abstract slot, e.g. 'abstract Regression4232.D.M: 'U -> int' and 'abstract Regression4232.D.M: 'T -> int'
let (|A|B|) (x:int) = A x;;
-----^^^^^
-stdin(832,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(834,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (x:'a) = A x;;
-----^^^^^
-stdin(835,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(837,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) (p:'a) (x:int) = A p;;
-----^^^^^
-stdin(838,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
+stdin(840,6): error FS1210: Active pattern '|A|B|' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
let (|A|B|) = failwith "" : Choice;;
-----^^^^^
-stdin(844,6): error FS1209: Active pattern '|A|B|' is not a function
+stdin(846,6): error FS1209: Active pattern '|A|B|' is not a function
diff --git a/tests/fsharp/core/printing/output.stdout.bsl b/tests/fsharp/core/printing/output.stdout.bsl
index ceb7d3d69a3..b2af7d4f2dc 100644
--- a/tests/fsharp/core/printing/output.stdout.bsl
+++ b/tests/fsharp/core/printing/output.stdout.bsl
@@ -4060,6 +4060,7 @@ type 'a T4063 = | AT4063 of 'a
#load "file.fs" ...;; // Load the given file(s) as if compiled and referenced
#time ["on"|"off"];; // Toggle timing on/off
#help;; // Display help
+ #help "idn";; // Display documentation for an identifier, e.g. #help "List.map";;
#r "nuget:FSharp.Data, 3.1.2";; // Load Nuget Package 'FSharp.Data' version '3.1.2'
#r "nuget:FSharp.Data";; // Load Nuget Package 'FSharp.Data' with the highest version
#clear;; // Clear screen
@@ -4069,6 +4070,27 @@ type 'a T4063 = | AT4063 of 'a
+> val it: string = "Check #help for an identifier"
+
+
+Description:
+Builds a new collection whose elements are the results of applying the given function
+to each of the elements of the collection.
+
+Parameters:
+- mapping: The function to transform elements from the input list.
+- list: The input list.
+Returns:
+The list of transformed elements.
+
+Examples:
+let inputs = [ "a"; "bbb"; "cc" ]
+
+inputs |> List.map (fun x -> x.Length)
+// Evaluates to [ 1; 3; 2 ]
+
+Full name: Microsoft.FSharp.Collections.ListModule.map
+Assembly: FSharp.Core.dll
> val it: string = "Check #time on and then off"
>
@@ -5041,8 +5063,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D =
new: x: int -> D
override ToString: unit -> string
@@ -5055,8 +5077,8 @@ module Test4343e =
val cA: C
val cB: C
val cAB: C * C * C list =
- (FSI_0090+Test4343e+C, FSI_0090+Test4343e+C,
- [FSI_0090+Test4343e+C; FSI_0090+Test4343e+C])
+ (FSI_0092+Test4343e+C, FSI_0092+Test4343e+C,
+ [FSI_0092+Test4343e+C; FSI_0092+Test4343e+C])
type D<'a> =
new: x: 'a -> D<'a>
override ToString: unit -> string
@@ -5231,7 +5253,7 @@ module Regression5218 =
type Regression4469 =
new: unit -> Regression4469
member ToString: unit -> string
-val r4469: Regression4469 = FSI_0106+Regression4469
+val r4469: Regression4469 = FSI_0108+Regression4469
val it: unit = ()
> Expect ABC = ABC
@@ -6311,7 +6333,7 @@ val ShortName: string = "hi"
> val list2: int list = [1]
-module FSI_0316.
+module FSI_0318.
A8a951db8294f99e95ae1d276a7ddaefd93d1548e6bf749bdeae55d2649682b3
{"ImmutableField0":6}
@@ -6333,7 +6355,7 @@ val it: unit = ()
> val it: {| AnonRecordField2: int |} = { AnonRecordField2 = 11 }
-module FSI_0323.Project.fsproj
+module FSI_0325.Project.fsproj
type R3 =
{ ImmutableField3: int }
diff --git a/tests/fsharp/core/printing/test.fsx b/tests/fsharp/core/printing/test.fsx
index c0943540b49..02e6de789a6 100644
--- a/tests/fsharp/core/printing/test.fsx
+++ b/tests/fsharp/core/printing/test.fsx
@@ -211,6 +211,8 @@ module RepeatedModule = begin let repeatedByteLiteral = [| 12uy; 13uy; 14uy |] e
(* Regressions for standard responses... *)
"Check #help";;
#help;;
+"Check #help for an identifier"
+#help "List.map";;
"Check #time on and then off";;
#time;; (* time on *)
(* no eval in between, since time can vary and look like a regression *)