├── examples ├── branch.txt ├── let-lambda.txt ├── counter2.txt └── counter.txt ├── src ├── Psyche.AST │ ├── paket.references │ ├── README.md │ ├── SExpr.fsi │ ├── Value.fsi │ ├── Type.fsi │ ├── AnnotatedAst.fsi │ ├── Psyche.AST.fsproj │ ├── Value.fs │ ├── UntypedAst.fsi │ ├── Type.fs │ ├── AnnotatedAst.fs │ ├── UntypedAst.fs │ └── SExpr.fs ├── Psyche.Base │ ├── paket.references │ ├── Map.fs │ ├── README.md │ ├── Option.fs │ ├── State.fs │ ├── Lens.fs │ ├── Result.fs │ ├── Psyche.Base.fsproj │ ├── Nel.fs │ ├── Functor.fs │ └── Monad.fs ├── Psyche.CAM │ ├── paket.references │ ├── Library.fsi │ ├── README.md │ ├── Psyche.CAM.fsproj │ └── Library.fs ├── Psyche.CLI │ ├── paket.references │ ├── README.md │ ├── Primitive.fsi │ ├── Psyche.CLI.fsproj │ ├── Program.fs │ └── Primitive.fs ├── Psyche.Compiler │ ├── paket.references │ ├── README.md │ ├── Library.fsi │ ├── Psyche.Compiler.fsproj │ └── Library.fs ├── Psyche.Interpreter │ ├── paket.references │ ├── README.md │ ├── Library.fsi │ ├── Psyche.Interpreter.fsproj │ └── Library.fs ├── Psyche.TypeChecker │ ├── paket.references │ ├── README.md │ ├── Library.fsi │ ├── Psyche.TypeChecker.fsproj │ └── Library.fs ├── Psyche.Base.Test │ ├── README.md │ ├── paket.references │ ├── Psyche.Base.Test.fsproj │ └── Program.fs ├── Psyche.Parser │ ├── paket.references │ ├── README.md │ ├── Library.fsi │ ├── Psyche.Parser.fsproj │ └── Library.fs ├── ModDepsVisualizer │ ├── README.md │ ├── paket.references │ ├── ModDepsVisualizer.fsproj │ └── Program.fs └── proj_deps.dot ├── global.json ├── .gitignore ├── .vscode └── extensions.json ├── .editorconfig ├── syntax.md ├── .config └── dotnet-tools.json ├── .github └── workflows │ ├── test.yml │ └── lint.yml ├── paket.dependencies ├── LICENSE ├── README.md ├── fsharplint.json ├── psyche.sln └── paket.lock /examples/branch.txt: -------------------------------------------------------------------------------- 1 | (if (< 2 3) 0 1) 2 | -------------------------------------------------------------------------------- /src/Psyche.AST/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.Base/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.CAM/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.CLI/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.Compiler/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.Interpreter/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.TypeChecker/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | -------------------------------------------------------------------------------- /src/Psyche.Base.Test/README.md: -------------------------------------------------------------------------------- 1 | # Tests for Base library 2 | -------------------------------------------------------------------------------- /src/Psyche.Parser/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | FParsec 3 | -------------------------------------------------------------------------------- /src/Psyche.Compiler/README.md: -------------------------------------------------------------------------------- 1 | # Compiler 2 | 3 | Byte code compiler 4 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "5.0.100" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/ModDepsVisualizer/README.md: -------------------------------------------------------------------------------- 1 | # Module Dependencies Visualizer 2 | 3 | WIP 4 | -------------------------------------------------------------------------------- /src/ModDepsVisualizer/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | FSharp.Compiler.Service 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .fake 2 | .ionide 3 | .paket 4 | bin 5 | obj 6 | packages 7 | 8 | *.psyb 9 | -------------------------------------------------------------------------------- /src/Psyche.Base.Test/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | Expecto 3 | Expecto.FsCheck 4 | -------------------------------------------------------------------------------- /src/Psyche.CAM/Library.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.CAM 2 | 3 | val startup : unit -> unit 4 | -------------------------------------------------------------------------------- /src/Psyche.AST/README.md: -------------------------------------------------------------------------------- 1 | # AST 2 | 3 | Type definitons for untyped AST (Abstract Syntax Tree) 4 | -------------------------------------------------------------------------------- /src/Psyche.Compiler/Library.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.Compiler 2 | 3 | val compile : unit -> unit 4 | -------------------------------------------------------------------------------- /src/Psyche.CLI/README.md: -------------------------------------------------------------------------------- 1 | # CLI 2 | 3 | Command Line Interface to launch REPL or to run programs 4 | -------------------------------------------------------------------------------- /src/Psyche.Parser/README.md: -------------------------------------------------------------------------------- 1 | # Parser 2 | 3 | S-Expression parser which returns type-annotated AST 4 | -------------------------------------------------------------------------------- /src/Psyche.CAM/README.md: -------------------------------------------------------------------------------- 1 | # CAM (Categorical Abstract Machine) 2 | 3 | Executes byte code (`*.psyb`) 4 | -------------------------------------------------------------------------------- /examples/let-lambda.txt: -------------------------------------------------------------------------------- 1 | (let 2 | (: double (-> Int Int)) 3 | (λ (: x Int) (* 2 x)) 4 | (double 7)) 5 | -------------------------------------------------------------------------------- /src/Psyche.Interpreter/README.md: -------------------------------------------------------------------------------- 1 | # Interpreter 2 | 3 | Evaluates untyped AST and returns an evaluation result 4 | -------------------------------------------------------------------------------- /src/Psyche.TypeChecker/README.md: -------------------------------------------------------------------------------- 1 | # Type Checker 2 | 3 | Type checker which finally generates untyped AST from type-annotated AST 4 | -------------------------------------------------------------------------------- /src/Psyche.Base/Map.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.Map 2 | 3 | let keys (m: Map<_, _>) = 4 | Map.fold (fun keys key _ -> key :: keys) [] m 5 | -------------------------------------------------------------------------------- /src/Psyche.CLI/Primitive.fsi: -------------------------------------------------------------------------------- 1 | module Primitive 2 | 3 | open Psyche.AST.Type 4 | open Psyche.AST.Value 5 | 6 | val env : Env 7 | 8 | val typeEnv : TypeEnv 9 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "editorconfig.editorconfig", 4 | "ionide.ionide-fsharp", 5 | "joaompinto.vscode-graphviz" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /src/Psyche.Parser/Library.fsi: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module Parser = 4 | open Psyche.AST.AnnotatedAst 5 | 6 | val tryParse : string -> Result 7 | -------------------------------------------------------------------------------- /src/Psyche.Interpreter/Library.fsi: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module Interpreter = 4 | open Psyche.AST.Value 5 | open Psyche.AST.UntypedAst 6 | 7 | val eval : Env -> UntypedAst -> Result 8 | -------------------------------------------------------------------------------- /src/Psyche.Base/README.md: -------------------------------------------------------------------------------- 1 | # Base library 2 | 3 | Types and extensions for F# standard library 4 | 5 | - `Nel` : Non empty list type 6 | - `Option` : Extension for `option` type 7 | - `Result` : Extension for `result` type 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = space 7 | indent_size = 4 8 | insert_final_newline = true 9 | 10 | [*.{cshtml,fsproj,json,yml}] 11 | indent_size = 2 12 | -------------------------------------------------------------------------------- /src/Psyche.TypeChecker/Library.fsi: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module TypeChecker = 4 | open Psyche.AST.Type 5 | open Psyche.AST.AnnotatedAst 6 | open Psyche.AST.UntypedAst 7 | 8 | val typeCheck: TypeEnv -> AnnotatedAst -> Result 9 | -------------------------------------------------------------------------------- /src/Psyche.AST/SExpr.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.AST.SExpr 2 | 3 | open AnnotatedAst 4 | 5 | type Atom = 6 | | SBool of bool 7 | | SInt of int 8 | | SFloat of float 9 | | Symbol of string 10 | 11 | type SExpr = 12 | | Atom of Atom 13 | | SList of SExpr list 14 | 15 | val toAnnotatedAst : SExpr -> Result 16 | -------------------------------------------------------------------------------- /src/Psyche.Base/Option.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.Option 2 | 3 | type OptionBuilder() = 4 | member _.Return(x) = Some x 5 | member _.ReturnFrom(m: _ option) = m 6 | member _.Bind(m, f) = Option.bind f m 7 | 8 | let option = OptionBuilder() 9 | 10 | let toResult = 11 | function 12 | | Some x -> Ok x 13 | | None -> Error() 14 | -------------------------------------------------------------------------------- /src/Psyche.Compiler/Psyche.Compiler.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /examples/counter2.txt: -------------------------------------------------------------------------------- 1 | (let 2 | (: make-counter (-> Int (-> Unit Int))) 3 | (λ (: init Int) 4 | (let (: count (Ref Int)) (ref init) 5 | (λ (: _ Unit) (mut count (+ (deref count) 1))))) 6 | (let (: counter (-> Unit Int)) (make-counter 0) 7 | (begin 8 | (counter #unit) 9 | (counter #unit) 10 | (counter #unit)))) 11 | -------------------------------------------------------------------------------- /syntax.md: -------------------------------------------------------------------------------- 1 | # Syntax 2 | 3 | ``` 4 | program = expr*; 5 | 6 | expr = atom | list; 7 | 8 | atom = bool | int | ident; 9 | 10 | list = '(' expr* ')'; 11 | 12 | bool = "true" | "false"; 13 | 14 | int = ["+" | "-"] non_zero_digit digit*; 15 | 16 | digit = 0 | non_zero_digit; 17 | 18 | non_zero_digit = 1 | 2 | 3 | .. | 7 | 8 | 9; 19 | 20 | ident = ? true, false でない半角英字の列 (2文字目以降では半角数字を使用可能) ?; 21 | ``` 22 | -------------------------------------------------------------------------------- /examples/counter.txt: -------------------------------------------------------------------------------- 1 | (let 2 | (: make-counter (-> Int (-> Int Int))) 3 | (λ (: init Int) 4 | (let 5 | (: count (Ref Int)) 6 | (ref init) 7 | (λ (: diff Int) (mut count (+ (deref count) diff))))) 8 | (let (: counter (-> Int Int)) (make-counter 0) 9 | (begin 10 | (counter 1) 11 | (counter 2) 12 | (counter 3)))) 13 | -------------------------------------------------------------------------------- /src/ModDepsVisualizer/ModDepsVisualizer.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net5.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/Psyche.CAM/Psyche.CAM.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Psyche.AST/Value.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.AST.Value 2 | 3 | open UntypedAst 4 | 5 | type Value = 6 | | UnitVal 7 | | Closure of VarId * UntypedAst * Env 8 | | BoolVal of bool 9 | | IntVal of int 10 | | FloatVal of float 11 | | RefVal of Value ref 12 | 13 | and Env 14 | 15 | module Env = 16 | val empty : Env 17 | 18 | val append : VarId -> Value -> Env -> Env 19 | 20 | val tryFind : VarId -> Env -> Value option 21 | -------------------------------------------------------------------------------- /src/Psyche.Compiler/Library.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Compiler 2 | 3 | open System.IO 4 | 5 | let compile () = 6 | use writer = new BinaryWriter(File.Open("out.psyb", FileMode.Create)) 7 | writer.Write("PSYC"B) // MAGIC 8 | writer.Write(1u) // VERSION 9 | writer.Write(1uy) // ldi 10 | writer.Write(3) // 3 11 | writer.Write(1uy) // ldi 12 | writer.Write(4) // 4 13 | writer.Write(10uy) // add 14 | -------------------------------------------------------------------------------- /src/Psyche.AST/Type.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.AST.Type 2 | 3 | open UntypedAst 4 | 5 | type Type = 6 | | TUnit 7 | | TInt 8 | | TFloat 9 | | TBool 10 | | TFun of Type * Type 11 | | TRef of Type 12 | 13 | static member StrMap : Map 14 | 15 | type TypeEnv 16 | 17 | module TypeEnv = 18 | val empty : TypeEnv 19 | 20 | val append : VarId -> Type -> TypeEnv -> TypeEnv 21 | 22 | val tryFind : VarId -> TypeEnv -> Option 23 | -------------------------------------------------------------------------------- /src/Psyche.Base.Test/Psyche.Base.Test.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | Exe 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.config/dotnet-tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "isRoot": true, 4 | "tools": { 5 | "paket": { 6 | "version": "6.0.0-beta4", 7 | "commands": [ 8 | "paket" 9 | ] 10 | }, 11 | "fake-cli": { 12 | "version": "5.20.4-alpha.1642", 13 | "commands": [ 14 | "fake" 15 | ] 16 | }, 17 | "dotnet-fsharplint": { 18 | "version": "0.17.1", 19 | "commands": [ 20 | "dotnet-fsharplint" 21 | ] 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Psyche.Base/State.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.State 2 | 3 | open Psyche.Base.Monad 4 | 5 | type State<'S, 'A> = 6 | | State of ('S -> ('A * 'S)) 7 | 8 | static member runState ((State f): State<'S, 'A>) (init: 'S) = 9 | f init 10 | 11 | static member MonadImpl (_: State<_, _>) = 12 | { 13 | Bind = fun f (State x) -> 14 | State(fun s -> 15 | let (v, s) = x s 16 | State.runState (f v) s) 17 | Return = fun x -> State(fun s -> (x, s)) 18 | } 19 | -------------------------------------------------------------------------------- /src/Psyche.Parser/Psyche.Parser.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net5.0 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: push 4 | 5 | jobs: 6 | test: 7 | if: "! contains(github.event.head_commit.message, '[ci skip]')" 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Setup .NET Core 12 | uses: actions/setup-dotnet@v1 13 | with: 14 | dotnet-version: '5.0.x' 15 | - name: Restore dotnet tools 16 | run: dotnet tool restore 17 | - name: Restore Paket 18 | run: dotnet paket restore 19 | - name: Run tests 20 | run: dotnet fake build -t test 21 | -------------------------------------------------------------------------------- /src/Psyche.Base/Lens.fs: -------------------------------------------------------------------------------- 1 | namespace Psyche.Base 2 | 3 | /// Polymorphic lens represented as a getter/setter pair 4 | /// the source of a PLens 5 | /// the modified source of a PLens 6 | /// the target of a PLens 7 | /// the modified target of a PLens 8 | type IPLens<'S, 'T, 'A, 'B> = 9 | abstract member Get: 'S -> 'A 10 | abstract member Set: 'B -> 'T 11 | abstract member Modify: ('A -> 'B) -> 'S -> 'T 12 | 13 | type ILens<'S, 'A> = IPLens<'S, 'S, 'A, 'A> 14 | -------------------------------------------------------------------------------- /src/Psyche.Base/Result.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.Result 2 | 3 | type ResultBuilder() = 4 | member _.Return(x) = Ok x 5 | member _.ReturnFrom(m: Result<_, _>) = m 6 | member _.Bind(m, f) = Result.bind f m 7 | 8 | let result = ResultBuilder() 9 | 10 | let fold 11 | (folder: 'State -> 'T -> Result<'State, 'Error>) 12 | (initialState: 'State) 13 | (list: 'T list) 14 | : Result<'State, 'Error> 15 | = 16 | let folder state elem = 17 | result { 18 | let! s = state 19 | return! folder s elem 20 | } 21 | List.fold folder (Ok initialState) list 22 | -------------------------------------------------------------------------------- /src/Psyche.Interpreter/Psyche.Interpreter.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Psyche.TypeChecker/Psyche.TypeChecker.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Psyche.Base/Psyche.Base.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /paket.dependencies: -------------------------------------------------------------------------------- 1 | version 6.0.0-alpha051 2 | source https://api.nuget.org/v3/index.json 3 | storage: none 4 | framework: net5.0 5 | 6 | nuget FSharp.Core 7 | 8 | // Parser 9 | nuget FParsec 10 | 11 | // Test 12 | nuget Expecto 13 | nuget Expecto.FsCheck 14 | 15 | // Module Dependencies Visualizer 16 | nuget FSharp.Compiler.Service 17 | 18 | // [ FAKE GROUP ] 19 | group NetcoreBuild 20 | source https://api.nuget.org/v3/index.json 21 | nuget Fake.Core.Target 22 | nuget Fake.DotNet.Cli 23 | // WORK AROUND: See https://github.com/fsprojects/Paket/issues/3907 24 | // Nuget.Packaging is required by Fake.DotNet.Cli 25 | nuget Nuget.Packaging < 5.7 26 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | 3 | on: push 4 | 5 | jobs: 6 | lint: 7 | if: "! contains(github.event.head_commit.message, '[ci skip]')" 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Setup .NET Core 12 | uses: actions/setup-dotnet@v1 13 | with: 14 | dotnet-version: '5.0.x' 15 | - name: Restore dotnet tools 16 | run: dotnet tool restore 17 | - name: Restore Paket 18 | run: dotnet paket restore 19 | - name: Restore projects 20 | run: dotnet restore 21 | - name: Run FSharpLint 22 | run: dotnet fsharplint lint psyche.sln 23 | -------------------------------------------------------------------------------- /src/proj_deps.dot: -------------------------------------------------------------------------------- 1 | digraph proj_deps { 2 | label = "Project dependency" 3 | 4 | base [shape = box, label = Base] 5 | base_test [shape = box, label = "Base Tests"] 6 | ast [shape = box, label = AST] 7 | interpreter [shape = box, label = Interpreter] 8 | type_checker [shape = box, label = "Type Checker"] 9 | parser [shape = box, label = Parser] 10 | cli [shape = box, label = CLI] 11 | 12 | base_test -> base 13 | interpreter -> base 14 | interpreter -> ast 15 | type_checker -> base 16 | type_checker -> ast 17 | parser -> base 18 | parser -> ast 19 | cli -> base 20 | cli -> interpreter 21 | cli -> type_checker 22 | cli -> parser 23 | } 24 | -------------------------------------------------------------------------------- /src/Psyche.AST/AnnotatedAst.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.AST.AnnotatedAst 2 | 3 | open Type 4 | 5 | type AVarId = string 6 | 7 | type AnnotatedAst = 8 | | AUnit 9 | | ABool of bool 10 | | AInt of int 11 | | AFloat of float 12 | | AVar of AVarId 13 | | AFun of arg: AVarId * argType: Type * body: AnnotatedAst 14 | | AApp of func: AnnotatedAst * actualArg: AnnotatedAst 15 | | AIf of cond: AnnotatedAst * _then: AnnotatedAst * _else: AnnotatedAst 16 | | ALet of name: AVarId * typeSig: Type * expr1: AnnotatedAst * expr2: AnnotatedAst 17 | | ABegin of Psyche.Base.Nel 18 | | AMakeRef of AnnotatedAst 19 | | ADeref of AnnotatedAst 20 | | AMut of AnnotatedAst * AnnotatedAst 21 | -------------------------------------------------------------------------------- /src/Psyche.AST/Psyche.AST.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/Psyche.AST/Value.fs: -------------------------------------------------------------------------------- 1 | module Psyche.AST.Value 2 | 3 | type Value = 4 | | UnitVal 5 | | Closure of UntypedAst.VarId * UntypedAst.UntypedAst * Env 6 | | BoolVal of bool 7 | | IntVal of int 8 | | FloatVal of float 9 | | RefVal of Value ref 10 | 11 | override this.ToString() = 12 | match this with 13 | | UnitVal -> "#unit" 14 | | BoolVal true -> "true" 15 | | BoolVal false -> "false" 16 | | IntVal n -> string n 17 | | FloatVal f -> string f 18 | | Closure _ -> "" 19 | | RefVal r -> $"" 20 | 21 | and Env = 22 | private 23 | | Env of (UntypedAst.VarId * Value) list 24 | 25 | module Env = 26 | let empty = Env [] 27 | 28 | let append varId value (Env env) = Env ((varId, value) :: env) 29 | 30 | let tryFind varId (Env env) = 31 | env 32 | |> List.tryFind (fst >> (=) varId) 33 | |> Option.map snd 34 | -------------------------------------------------------------------------------- /src/Psyche.AST/UntypedAst.fsi: -------------------------------------------------------------------------------- 1 | module Psyche.AST.UntypedAst 2 | 3 | type BinOp = 4 | | AddI 5 | | AddF 6 | | SubI 7 | | SubF 8 | | MulI 9 | | MulF 10 | | DivI 11 | | DivF 12 | | Mod 13 | | Eq 14 | | Lt 15 | | Le 16 | 17 | type VarId = string 18 | 19 | type UntypedAst = 20 | | UUnit 21 | | UBool of value: bool 22 | | UInt of value: int 23 | | UFloat of value: float 24 | | UBinApp of op: BinOp * lhs: UntypedAst * rhs: UntypedAst 25 | | UVar of id: VarId 26 | | UFun of arg: VarId * body: UntypedAst 27 | | UIntOfFloat of UntypedAst 28 | | UFloatOfInt of UntypedAst 29 | | UApp of func: UntypedAst * actualArg: UntypedAst 30 | | UIf of cond: UntypedAst * _then: UntypedAst * _else: UntypedAst 31 | | ULet of VarId * UntypedAst * UntypedAst 32 | | UBegin of Psyche.Base.Nel 33 | | UMakeRef of UntypedAst 34 | | UDeref of UntypedAst 35 | | UMut of UntypedAst * UntypedAst 36 | -------------------------------------------------------------------------------- /src/Psyche.Base/Nel.fs: -------------------------------------------------------------------------------- 1 | namespace Psyche.Base 2 | 3 | open System.Collections 4 | open System.Collections.Generic 5 | 6 | type Nel<'a> = 7 | private 8 | | Nel of 'a * ('a list) 9 | 10 | interface IReadOnlyCollection<'a> with 11 | member this.Count = 12 | let (Nel(_, tail)) = this 13 | 1 + List.length tail 14 | 15 | member this.GetEnumerator() = 16 | let (Nel(head, tail)) = this 17 | (head :: tail :> seq<_>).GetEnumerator() 18 | 19 | member this.GetEnumerator() = 20 | let (Nel(head, tail)) = this 21 | (head :: tail :> seq<_>).GetEnumerator() :> IEnumerator 22 | 23 | module Nel = 24 | module ActivePattern = 25 | let (|Nel|) (Nel(head, tail)) = (head, tail) 26 | 27 | let singleton v = Nel(v, []) 28 | let create head tail = Nel(head, tail) 29 | let head (Nel(head, _)) = head 30 | let tail (Nel(_, tail)) = tail 31 | let length (Nel(_, tail)) = 1 + List.length tail 32 | -------------------------------------------------------------------------------- /src/Psyche.CLI/Psyche.CLI.fsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net5.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/Psyche.AST/Type.fs: -------------------------------------------------------------------------------- 1 | module Psyche.AST.Type 2 | 3 | open UntypedAst 4 | 5 | type Type = 6 | | TUnit 7 | | TInt 8 | | TFloat 9 | | TBool 10 | | TFun of Type * Type 11 | | TRef of Type 12 | 13 | static member StrMap = 14 | Map.ofArray 15 | [| ("Unit", TUnit) 16 | ("Int", TInt) 17 | ("Bool", TBool) |] 18 | 19 | override this.ToString() = 20 | match this with 21 | | TUnit -> "Unit" 22 | | TInt -> "Int" 23 | | TFloat -> "Float" 24 | | TBool -> "Bool" 25 | | TFun(arg, ret) -> $"(-> {arg} {ret})" 26 | | TRef ty -> $"(Ref {ty})" 27 | 28 | type TypeEnv = 29 | | TyEnv of (VarId * Type) list 30 | 31 | [] 32 | module TypeEnv = 33 | let empty = TyEnv [] 34 | 35 | let append varId ty (TyEnv env) = TyEnv ((varId, ty) :: env) 36 | 37 | let tryFind varId (TyEnv env) = 38 | env 39 | |> List.tryFind (fst >> (=) varId) 40 | |> Option.map snd 41 | -------------------------------------------------------------------------------- /src/Psyche.Base/Functor.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.Functor 2 | 3 | [] 4 | type FunctorClass<'a, 'b, 'Ma, 'Mb> = { 5 | Fmap: ('a -> 'b) -> 'Ma -> 'Mb 6 | } 7 | 8 | type FunctorBuiltin = 9 | | FunctorBuiltin 10 | 11 | static member FunctorImpl (_: _ option) = 12 | { Fmap = Option.map } 13 | 14 | static member FunctorImpl (_: Result<_, _>) = 15 | { Fmap = Result.map } 16 | 17 | static member FunctorImpl (_: _ list) = 18 | { Fmap = List.map } 19 | 20 | static member FunctorImpl (_: _[]) = 21 | { Fmap = Array.map } 22 | 23 | let inline getImpl 24 | (builtin: ^Builtin) 25 | (dummy: FunctorClass< ^a, ^b, ^Ma, ^Mb >): FunctorClass< ^a, ^b, ^Ma, ^Mb > = 26 | ((^Builtin or ^Ma): (static member FunctorImpl: ^Ma -> FunctorClass< ^a, ^b, ^Ma, ^Mb >) (Unchecked.defaultof< ^Ma >)) 27 | 28 | let inline fmap (f: ^a -> ^b) (m: ^Ma): ^Mb = 29 | (getImpl FunctorBuiltin (Unchecked.defaultof< FunctorClass< ^a, ^b, ^Ma, ^Mb > >)).Fmap f m 30 | 31 | let inline (<%>) (f: ^a -> ^b) (m: ^Ma): ^Mb = fmap f m 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 0918nobita 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/Psyche.Base/Monad.fs: -------------------------------------------------------------------------------- 1 | module Psyche.Base.Monad 2 | 3 | [] 4 | type MonadClass<'a, 'Ma, 'Mb> = { 5 | Bind: ('a -> 'Mb) -> 'Ma -> 'Mb 6 | Return: 'a -> 'Ma 7 | } 8 | 9 | type MonadBuiltin = 10 | | MonadBuiltin 11 | 12 | static member MonadImpl (_: _ option) = 13 | { Bind = Option.bind; Return = Some } 14 | 15 | static member MonadImpl (_: Result<_, _>) = 16 | { Bind = Result.bind; Return = Ok } 17 | 18 | static member MonadImpl (_: _ list) = 19 | let concatMap f l = List.concat (List.map f l) 20 | { 21 | Bind = concatMap 22 | Return = List.singleton 23 | } 24 | 25 | static member MonadImpl (_: _[]) = 26 | let concatMap f arr = Array.concat (Array.map f arr) 27 | { 28 | Bind = concatMap 29 | Return = Array.singleton 30 | } 31 | 32 | let inline getImpl 33 | (builtin: ^Builtin) 34 | (dummy: MonadClass< ^a, ^Ma, ^Mb >): MonadClass< ^a, ^Ma, ^Mb > = 35 | ((^Builtin or ^Ma): (static member MonadImpl: ^Ma -> MonadClass< ^a, ^Ma, ^Mb >) (Unchecked.defaultof< ^Ma >)) 36 | 37 | let inline bind_ (f: ^a -> ^Mb) (x: ^Ma): ^Mb = 38 | (getImpl MonadBuiltin (Unchecked.defaultof< MonadClass< ^a, ^Ma, ^Mb > >)).Bind f x 39 | 40 | let inline return_ (x: ^a): ^Ma = 41 | (getImpl MonadBuiltin (Unchecked.defaultof< MonadClass< ^a, ^Ma, _ > >)).Return x 42 | 43 | type MonadBuilder() = 44 | member inline _.Bind (x, f) = bind_ f x 45 | member inline _.Return x = return_ x 46 | member inline _.ReturnFrom mx = mx 47 | 48 | let monad = MonadBuilder() 49 | -------------------------------------------------------------------------------- /src/Psyche.AST/AnnotatedAst.fs: -------------------------------------------------------------------------------- 1 | module Psyche.AST.AnnotatedAst 2 | 3 | open Type 4 | 5 | type AVarId = string 6 | 7 | type AnnotatedAst = 8 | | AUnit 9 | | ABool of bool 10 | | AInt of int 11 | | AFloat of float 12 | | AVar of AVarId 13 | | AFun of arg: AVarId * argType: Type * body: AnnotatedAst 14 | | AApp of func: AnnotatedAst * actualArg: AnnotatedAst 15 | | AIf of cond: AnnotatedAst * _then: AnnotatedAst * _else: AnnotatedAst 16 | | ALet of name: AVarId * typeSig: Type * expr1: AnnotatedAst * expr2: AnnotatedAst 17 | | ABegin of Psyche.Base.Nel 18 | | AMakeRef of AnnotatedAst 19 | | ADeref of AnnotatedAst 20 | | AMut of AnnotatedAst * AnnotatedAst 21 | 22 | override this.ToString() = 23 | match this with 24 | | AUnit -> "#unit" 25 | | ABool true -> "true" 26 | | ABool false -> "false" 27 | | AInt n -> string n 28 | | AFloat f -> string f 29 | | AVar x -> x 30 | | AFun(arg, argType, body) -> $"(λ (: {arg} {argType}) {body})" 31 | | AApp(func, actualArg) -> $"({func} {actualArg})" 32 | | AIf(cond, _then, _else) -> $"(if {cond} {_then} {_else})" 33 | | ALet(name, typeSig, expr1, expr2) -> 34 | $"(let (: {name} {typeSig}) {expr1} {expr2})" 35 | | ABegin body -> 36 | let inner = 37 | body 38 | |> Seq.map string 39 | |> Seq.reduce (sprintf "%O %O") 40 | $"(begin {inner})" 41 | | AMakeRef expr -> $"(ref {expr})" 42 | | ADeref expr -> $"(deref {expr})" 43 | | AMut (expr1, expr2) -> $"(mut {expr1} {expr2})" 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Psyche 2 | 3 | ![Lint](https://github.com/0918nobita/psyche/workflows/Lint/badge.svg) ![Test](https://github.com/0918nobita/psyche/workflows/Test/badge.svg) 4 | 5 | Programming language 6 | 7 | ## Requirements 8 | 9 | - .NET 5.0 SDK 10 | 11 | ## Setup dotnet tools 12 | 13 | ``` 14 | $ dotnet tool restore 15 | $ dotnet paket restore 16 | ``` 17 | 18 | ## Build 19 | 20 | ### Debug Build 21 | 22 | ``` 23 | $ dotnet fake build 24 | ``` 25 | 26 | ### Release Build 27 | 28 | ``` 29 | $ dotnet fake build -t release 30 | ``` 31 | 32 | ## Launch a REPL 33 | 34 | - Type `:exit` to exit the REPL 35 | 36 | ``` 37 | $ dotnet run -p src/Psyche.CLI -- repl 38 | > (+ 1) 39 | Static type: (-> Int Int) 40 | Result: 41 | 42 | > (+ 3 4) 43 | Static type: Int 44 | Result: 7 45 | 46 | > :exit 47 | ``` 48 | 49 | ## Run programs 50 | 51 | ``` 52 | $ dotnet run -p src/Psyche.CLI -- interpret examples/branch.txt 53 | Static type: Int 54 | Result: 0 55 | 56 | $ dotnet run -p src/Psyche.CLI -- interpret examples/let-lambda.txt 57 | Static type: Int 58 | Result: 14 59 | 60 | $ dotnet run -p src/Psyche.CLI -- interpret examples/counter.txt 61 | Static type: Int 62 | Result: 6 63 | 64 | $ dotnet run -p src/Psyche.CLI -- interpret examples/counter2.txt 65 | Static type: Int 66 | Result: 3 67 | ``` 68 | 69 | ## Run tests 70 | 71 | ``` 72 | $ dotnet fake build -t test 73 | ``` 74 | 75 | ## Create self-contained executable 76 | 77 | ``` 78 | $ dotnet fake build -t publish 79 | ``` 80 | 81 | resulting publish folder : ``src/Psyche.CLI/bin/Release/net5.0/{runtime}/publish`` 82 | 83 | executable file : ``src/Psyche.CLI/bin/Release/net5.0/{runtime}/publish/Psyche.CLI`` 84 | -------------------------------------------------------------------------------- /fsharplint.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignoreFiles": ["*assemblyinfo.*"], 3 | "globals": { 4 | "numIdentationSpaces": 4 5 | }, 6 | "formatting": { 7 | "typedItemSpacing": { 8 | "enabled": true, 9 | "config": { 10 | "typedItemStyle": "SpaceAfter" 11 | } 12 | }, 13 | "typePrefixing": { "enabled": true }, 14 | "unionDefinitionIndentation": { "enabled": true }, 15 | "moduleDeclSpacing": { "enabled": false }, 16 | "classMemberSpacing": { "enabled": false } 17 | }, 18 | "conventions": { 19 | "sourceLength": { 20 | "maxLinesInMatchLambdaFunction": { 21 | "enabled": true, 22 | "config": { 23 | "maxLines": 20 24 | } 25 | } 26 | } 27 | }, 28 | "tupleCommaSpacing": { "enabled": true }, 29 | "tupleIdentation": { "enabled": true }, 30 | "tupleParentheses": { "enabled": true }, 31 | "patternMatchClausesOnNewLine": { "enabled": true }, 32 | "patternMatchOrClausesOnNewLine": { "enabled": true }, 33 | "patternMatchClauseIdentation": { 34 | "enabled": true, 35 | "config": { 36 | "allowSingleLineLambda": true 37 | } 38 | }, 39 | "patternMatchExpressionIdentation": { "enabled": true }, 40 | "recursiveAsyncFunction": { "enabled": true }, 41 | "redundantNewKeyword": { "enabled": true }, 42 | "nestedStatements": { 43 | "enabled": true, 44 | "config": { 45 | "depth": 8 46 | } 47 | }, 48 | "failwithWithSingleArgument": { "enabled": true }, 49 | "raiseWithSingleArgument": { "enabled": true }, 50 | "nullArgWithSingleArgument": { "enabled": true }, 51 | "invalidOpWithSingleArgument": { "enabled": true }, 52 | "invalidArgWithTwoArguments": { "enabled": true }, 53 | "failwithfWithArgumentsMatchingFormatString": { "enabled": true }, 54 | "maxLinesInLambdaFunction": { 55 | "enabled": true, 56 | "config": { 57 | "maxLines": 7 58 | } 59 | }, 60 | "maxLinesInValue": { 61 | "enalbed": true, 62 | "config": { 63 | "maxLines": 100 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/Psyche.Parser/Library.fs: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module Parser = 4 | module BMap = Psyche.Base.Map 5 | open FParsec 6 | open Psyche.AST.SExpr 7 | 8 | let ident = 9 | let start = anyOf "+-*/%._λ<=>#:\'" <|> asciiLetter 10 | let cont = start <|> digit 11 | parse { 12 | let! c = start |>> string 13 | let! cs = manyChars cont 14 | return Atom(Symbol(c + cs)) 15 | } 16 | 17 | let intOrFloatLiteral = 18 | let intLiteral = pint32 |>> SInt |>> Atom 19 | let floatLiteral = 20 | parse { 21 | let! f = pfloat 22 | do! skipChar 'f' 23 | return Atom(SFloat f) 24 | } 25 | |> attempt 26 | floatLiteral <|> intLiteral 27 | 28 | let boolLiteral = 29 | let ptrue = stringReturn "true" <| Atom(SBool true) 30 | let pfalse = stringReturn "false" <| Atom(SBool false) 31 | ptrue <|> pfalse 32 | 33 | let atom = intOrFloatLiteral <|> boolLiteral <|> ident 34 | 35 | let rec sList() = 36 | parse { 37 | do! skipChar '(' 38 | let! head = expr() 39 | let! tail = many (spaces1 >>. expr()) 40 | do! skipChar ')' 41 | return SList(head :: tail) 42 | } 43 | 44 | and expr() = atom <|> sList() 45 | 46 | let program src = 47 | let parser = 48 | parse { 49 | let! sexpr = atom <|> expr() 50 | do! spaces 51 | do! eof 52 | return sexpr 53 | } 54 | match run parser src with 55 | | Success(v, _, _) -> Result.Ok(v) 56 | | Failure(msg, _, _) -> Result.Error(msg) 57 | 58 | module BResult = Psyche.Base.Result 59 | 60 | /// Parse string into type-annotated AST 61 | let tryParse src = 62 | BResult.result { 63 | let! sexp = program src 64 | return! Psyche.AST.SExpr.toAnnotatedAst sexp 65 | } 66 | -------------------------------------------------------------------------------- /src/Psyche.CLI/Program.fs: -------------------------------------------------------------------------------- 1 | module Program 2 | 3 | module BNel = Psyche.Base.Nel 4 | module BResult = Psyche.Base.Result 5 | 6 | open System.IO 7 | 8 | let run src = 9 | BResult.result { 10 | let! annotatedAst = Psyche.Parser.tryParse src 11 | let! (ty, untypedAst) = Psyche.TypeChecker.typeCheck (Primitive.typeEnv) annotatedAst 12 | printfn "Static type: %O" ty 13 | let! value = Psyche.Interpreter.eval (Primitive.env) untypedAst 14 | return value 15 | } 16 | 17 | let interactive () = 18 | fun _ -> 19 | printf "> " 20 | System.Console.ReadLine() 21 | |> Seq.initInfinite 22 | |> Seq.takeWhile (fun input -> not(isNull input) && input <> ":exit") 23 | |> Seq.iter (fun src -> 24 | match run src with 25 | | Ok value -> 26 | printfn "Result: %O\n" value 27 | | Error msg -> 28 | eprintfn "%s\n" msg) 29 | 30 | let help () = 31 | printfn "The Psyche programming language" 32 | printfn "" 33 | printfn "Usage:" 34 | printfn "" 35 | printfn " Psyche.CLI [arguments]" 36 | printfn "" 37 | printfn "The commands are:" 38 | printfn "" 39 | printfn " compile compile source code, then generate byte code" 40 | printfn " interpret interpret source code" 41 | printfn " repl launch a REPL process" 42 | printfn " run execute byte code" 43 | printfn " version show Psyche version" 44 | printfn "" 45 | 46 | [] 47 | let main argv = 48 | if Array.isEmpty argv 49 | then 50 | help () 51 | else 52 | match argv.[0] with 53 | | "repl" -> interactive () 54 | | "compile" -> 55 | Psyche.Compiler.compile () 56 | | "run" -> 57 | Psyche.CAM.startup () 58 | | "interpret" -> 59 | if Array.length argv <> 2 60 | then 61 | eprintfn "Invalid argument" 62 | exit 1 63 | let srcPath = argv.[1] 64 | let src = File.ReadAllText srcPath 65 | 66 | match run src with 67 | | Ok value -> 68 | printfn "Result: %O" value 69 | | Error msg -> 70 | eprintfn "%s" msg 71 | exit 1 72 | | "version" -> 73 | printfn "Psyche version 0.0.3" 74 | | "help" -> 75 | help () 76 | | _ -> 77 | eprintfn "Invalid command" 78 | exit 1 79 | 0 80 | -------------------------------------------------------------------------------- /src/Psyche.Base.Test/Program.fs: -------------------------------------------------------------------------------- 1 | module Program 2 | 3 | open Expecto 4 | open Psyche.Base.Monad 5 | open Psyche.Base.State 6 | open Psyche.Base.Functor 7 | 8 | [] 9 | let testState = 10 | test "state" { 11 | let state1 = State (fun x -> (string (x + 1), x * 2)) 12 | Expect.equal (State.runState state1 6) ("7", 12) "runState" 13 | 14 | let state2 = monad { 15 | let! v = state1 16 | return v + "!" 17 | } 18 | 19 | Expect.equal (State.runState state2 6) ("7!", 12) "Bind, Return" 20 | 21 | let state3 = monad { 22 | let! v = state1 23 | return! State (fun s -> (Some (v + ":" + string s), 0)) 24 | } 25 | 26 | Expect.equal (State.runState state3 6) ((Some "7:12"), 0) "ReturnFrom" 27 | } 28 | 29 | [] 30 | let testFunctor = 31 | test "functor" { 32 | let actual = snd <%> Some (1, 2) 33 | Expect.equal actual (Some 2) "Functor Option" 34 | 35 | let actual = (sprintf "%s!") <%> ["A"; "B"; "C"] 36 | Expect.equal actual ["A!"; "B!"; "C!"] "Functor List" 37 | 38 | let actual = (sprintf "(%s)") <%> [|"A"; "B"; "C"|] 39 | Expect.equal actual [|"(A)"; "(B)"; "(C)"|] "Functor Array" 40 | 41 | let actual = fst <%> Ok (3, 4) 42 | Expect.equal actual (Ok 3) "Functor Result" 43 | } 44 | 45 | [] 46 | let testMonad = 47 | test "monad" { 48 | let actual = monad { 49 | let! a = Some 21 50 | let! b = Some 2 51 | return a * b 52 | } 53 | 54 | Expect.equal actual (Some 42) "Monad Option" 55 | 56 | // concat (map (fun a -> (concat (map (fun b -> [a * 2 + b]) [10; 20; 30]))) [1; 2; 3]) 57 | // concat [(concat (map (fun b -> [2 + b]) [10; 20; 30])); (concat (map (fun b -> [4 + b]) [10; 20; 30])); (concat (map (fun b -> [6 + b]) [10; 20; 30]))] 58 | // concat [(concat [[12]; [22]; [32]]); (concat [[14]; [24]; [34]]); (concat [[16]; [26]; [36]])] 59 | // concat [[12; 22; 32]; [14; 24; 34]; [16; 26; 36]] 60 | // [12; 22; 32; 14; 24; 34; 16; 26; 36] 61 | let actual = monad { 62 | let! a = [1; 2; 3] 63 | let! b = [10; 20; 30] 64 | return a * 2 + b 65 | } 66 | 67 | let expected = [12; 22; 32; 14; 24; 34; 16; 26; 36] 68 | 69 | Expect.equal actual expected "Monad List" 70 | } 71 | 72 | [] 73 | let properties = 74 | testList "FsCheck" 75 | [ testProperty "Addition is commutative" <| fun a b -> a + b = b + a 76 | 77 | testProperty "reverse list" <| fun (xs: int list) -> 78 | let reversed = List.rev xs 79 | List.rev reversed = xs ] 80 | 81 | [] 82 | let main argv = runTestsInAssembly defaultConfig argv 83 | -------------------------------------------------------------------------------- /src/Psyche.AST/UntypedAst.fs: -------------------------------------------------------------------------------- 1 | module Psyche.AST.UntypedAst 2 | 3 | type VarId = string 4 | 5 | type BinOp = 6 | | AddI 7 | | AddF 8 | | SubI 9 | | SubF 10 | | MulI 11 | | MulF 12 | | DivI 13 | | DivF 14 | | Mod 15 | | Eq 16 | | Lt 17 | | Le 18 | 19 | static member StrMap = 20 | Map.ofArray 21 | [| ("+", AddI) 22 | ("+.", AddF) 23 | ("-", SubI) 24 | ("-.", SubF) 25 | ("*", MulI) 26 | ("*.", MulF) 27 | ("/", DivI) 28 | ("/.", DivF) 29 | ("%", Mod) 30 | ("=", Eq) 31 | ("<", Lt) 32 | ("<=", Le) |] 33 | 34 | override this.ToString() = 35 | match this with 36 | | AddI -> "+" 37 | | AddF -> "+." 38 | | SubI -> "-" 39 | | SubF -> "-." 40 | | MulI -> "*" 41 | | MulF -> "*." 42 | | DivI -> "/" 43 | | DivF -> "/." 44 | | Mod -> "%" 45 | | Eq -> "=" 46 | | Lt -> "<" 47 | | Le -> "<=" 48 | 49 | type UntypedAst = 50 | | UUnit 51 | | UBool of value: bool 52 | | UInt of value: int 53 | | UFloat of value: float 54 | | UBinApp of op: BinOp * lhs: UntypedAst * rhs: UntypedAst 55 | | UVar of id: VarId 56 | | UFun of arg: VarId * body: UntypedAst 57 | | UIntOfFloat of UntypedAst 58 | | UFloatOfInt of UntypedAst 59 | | UApp of func: UntypedAst * actualArg: UntypedAst 60 | | UIf of cond: UntypedAst * _then: UntypedAst * _else: UntypedAst 61 | | ULet of VarId * UntypedAst * UntypedAst 62 | | UBegin of Psyche.Base.Nel 63 | | UMakeRef of UntypedAst 64 | | UDeref of UntypedAst 65 | | UMut of UntypedAst * UntypedAst 66 | 67 | override this.ToString() = 68 | match this with 69 | | UUnit -> "#unit" 70 | | UBool true -> "true" 71 | | UBool false -> "false" 72 | | UInt n -> string n 73 | | UFloat f -> string f 74 | | UBinApp(op, lhs, rhs) -> $"({op} {lhs} {rhs})" 75 | | UVar x -> x 76 | | UFun(arg, body) -> $"(λ {arg} {body})" 77 | | UIntOfFloat ast -> $"(int-of-float {ast})" 78 | | UFloatOfInt ast -> $"(float-of-int {ast})" 79 | | UApp(func, arg) -> $"({func} {arg})" 80 | | UIf(cond, _then, _else) -> $"(if {cond} {_then} {_else})" 81 | | ULet(ident, e1, e2) -> $"(let {ident} {e1} {e2})" 82 | | UBegin body -> 83 | let inner = 84 | body 85 | |> Seq.map string 86 | |> Seq.reduce (sprintf "%O %O") 87 | $"(begin {inner})" 88 | | UMakeRef e -> $"(ref {e})" 89 | | UDeref e -> $"(deref {e})" 90 | | UMut(refExpr, expr) -> $"(mut {refExpr} {expr})" 91 | -------------------------------------------------------------------------------- /src/Psyche.CLI/Primitive.fs: -------------------------------------------------------------------------------- 1 | module Primitive 2 | 3 | open Psyche.AST.Type 4 | open Psyche.AST.UntypedAst 5 | open Psyche.AST.Value 6 | 7 | let env = 8 | let pureAddI = Closure("a", UFun("b", UBinApp(AddI, UVar "a", UVar "b")), Env.empty) 9 | let pureSubI = Closure("a", UFun("b", UBinApp(SubI, UVar "a", UVar "b")), Env.empty) 10 | let pureMulI = Closure("a", UFun("b", UBinApp(MulI, UVar "a", UVar "b")), Env.empty) 11 | let pureDivI = Closure("a", UFun("b", UBinApp(DivI, UVar "a", UVar "b")), Env.empty) 12 | let pureAddF = Closure("a", UFun("b", UBinApp(AddF, UVar "a", UVar "b")), Env.empty) 13 | let pureSubF = Closure("a", UFun("b", UBinApp(SubF, UVar "a", UVar "b")), Env.empty) 14 | let pureMulF = Closure("a", UFun("b", UBinApp(MulF, UVar "a", UVar "b")), Env.empty) 15 | let pureDivF = Closure("a", UFun("b", UBinApp(DivF, UVar "a", UVar "b")), Env.empty) 16 | let pureMod = Closure("a", UFun("b", UBinApp(Mod, UVar "a", UVar "b")), Env.empty) 17 | let pureLt = Closure("a", UFun("b", UBinApp(Lt, UVar "a", UVar "b")), Env.empty) 18 | let pureLe = Closure("a", UFun("b", UBinApp(Le, UVar "a", UVar "b")), Env.empty) 19 | let pureIntOfFloat = Closure("f", UIntOfFloat(UVar "f"), Env.empty) 20 | let pureFloatOfInt = Closure("n", UIntOfFloat(UVar "n"), Env.empty) 21 | 22 | Env.empty 23 | |> Env.append "+" pureAddI 24 | |> Env.append "-" pureSubI 25 | |> Env.append "*" pureMulI 26 | |> Env.append "/" pureDivI 27 | |> Env.append "+." pureAddF 28 | |> Env.append "-." pureSubF 29 | |> Env.append "*." pureMulF 30 | |> Env.append "/." pureDivF 31 | |> Env.append "%" pureMod 32 | |> Env.append "<" pureLt 33 | |> Env.append "<=" pureLe 34 | |> Env.append "int-of-float" pureIntOfFloat 35 | |> Env.append "float-of-int" pureFloatOfInt 36 | 37 | let typeEnv = 38 | let pureAddI = TFun(TInt, TFun(TInt, TInt)) 39 | let pureSubI = TFun(TInt, TFun(TInt, TInt)) 40 | let pureMulI = TFun(TInt, TFun(TInt, TInt)) 41 | let pureDivI = TFun(TInt, TFun(TInt, TInt)) 42 | let pureAddF = TFun(TFloat, TFun(TFloat, TFloat)) 43 | let pureSubF = TFun(TFloat, TFun(TFloat, TFloat)) 44 | let pureMulF = TFun(TFloat, TFun(TFloat, TFloat)) 45 | let pureDivF = TFun(TFloat, TFun(TFloat, TFloat)) 46 | let pureMod = TFun(TInt, TFun(TInt, TInt)) 47 | let pureLt = TFun(TInt, TFun(TInt, TBool)) 48 | let pureLe = TFun(TInt, TFun(TInt, TBool)) 49 | let pureIntOfFloat = TFun(TFloat, TInt) 50 | let pureFloatOfInt = TFun(TInt, TFloat) 51 | 52 | TypeEnv.empty 53 | |> TypeEnv.append "+" pureAddI 54 | |> TypeEnv.append "-" pureSubI 55 | |> TypeEnv.append "*" pureMulI 56 | |> TypeEnv.append "/" pureDivI 57 | |> TypeEnv.append "+." pureAddF 58 | |> TypeEnv.append "-." pureSubF 59 | |> TypeEnv.append "*." pureMulF 60 | |> TypeEnv.append "/." pureDivF 61 | |> TypeEnv.append "%" pureMod 62 | |> TypeEnv.append "<" pureLt 63 | |> TypeEnv.append "<=" pureLe 64 | |> TypeEnv.append "int-of-float" pureIntOfFloat 65 | |> TypeEnv.append "float-of-int" pureFloatOfInt 66 | -------------------------------------------------------------------------------- /src/ModDepsVisualizer/Program.fs: -------------------------------------------------------------------------------- 1 | module Program 2 | 3 | open System 4 | 5 | open FSharp.Compiler.SourceCodeServices 6 | open FSharp.Compiler.Text 7 | 8 | [] 9 | let main argv = 10 | printfn "Module Dependencies Visualizer\n" 11 | 12 | // 1st arg: the list of defined symbols (required beacuse the tokenizer handles `#if` directives) 13 | // 2nd arg: the file name of the source code (it doesn't have to exist) 14 | let sourceTok = FSharpSourceTokenizer([], Some "Example.fs") 15 | 16 | let rec tokenizeLine (tokenizer: FSharpLineTokenizer) state = 17 | match tokenizer.ScanToken(state) with 18 | | Some tok, state -> 19 | // FSharpTokenInfo 20 | // TokenName: the name of the token (as defined in the F# lexer) 21 | // LeftColumn, RightColumn: the location of the token inside the line 22 | // ColorClass: information about the token category that can be used for colorizing F# code 23 | Console.ForegroundColor <- 24 | match tok.ColorClass with 25 | | FSharpTokenColorKind.Default -> 26 | ConsoleColor.DarkGray 27 | | FSharpTokenColorKind.Keyword -> 28 | ConsoleColor.Cyan 29 | | FSharpTokenColorKind.Operator -> 30 | ConsoleColor.DarkCyan 31 | | FSharpTokenColorKind.Punctuation -> 32 | ConsoleColor.Yellow 33 | | FSharpTokenColorKind.String -> 34 | ConsoleColor.Blue 35 | | _ -> 36 | ConsoleColor.White 37 | printfn " %s (at %d ~ %d)" tok.TokenName tok.LeftColumn tok.RightColumn 38 | Console.ResetColor() 39 | tokenizeLine tokenizer state 40 | | None, state -> state 41 | 42 | let rec tokenizeLines state count = 43 | function 44 | | line :: lines -> 45 | printfn $"Line {count}:" 46 | let tokenizer = sourceTok.CreateLineTokenizer(line) 47 | let state = tokenizeLine tokenizer state 48 | tokenizeLines state (count + 1) lines 49 | | [] -> () 50 | 51 | let lines = "let hello () =\n printfn \"Hello, world!\"" 52 | 53 | lines.Split('\r', '\n') 54 | |> List.ofSeq 55 | |> tokenizeLines FSharpTokenizerLexState.Initial 1 56 | 57 | let checker = FSharpChecker.Create() 58 | 59 | let getUntypedAst (file: string) (input: ISourceText) = 60 | let untypedRes = 61 | async { 62 | let! projOptions, _ = checker.GetProjectOptionsFromScript(file, input) 63 | let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(projOptions) 64 | return! checker.ParseFile(file, input, parsingOptions) 65 | } 66 | |> Async.RunSynchronously 67 | 68 | match untypedRes.ParseTree with 69 | | Some tree -> tree 70 | | None -> failwith "Something went wrong during parsing!" 71 | 72 | SourceText.ofString lines 73 | |> getUntypedAst "Example.fs" 74 | |> printfn "\n%A" 75 | 76 | 0 77 | -------------------------------------------------------------------------------- /src/Psyche.AST/SExpr.fs: -------------------------------------------------------------------------------- 1 | module Psyche.AST.SExpr 2 | 3 | module BNel = Psyche.Base.Nel 4 | module BOption = Psyche.Base.Option 5 | module BResult = Psyche.Base.Result 6 | 7 | open BNel.ActivePattern 8 | open Type 9 | open AnnotatedAst 10 | 11 | type Atom = 12 | | SBool of bool 13 | | SInt of int 14 | | SFloat of float 15 | | Symbol of string 16 | 17 | override this.ToString() = 18 | match this with 19 | | SBool true -> "true" 20 | | SBool false -> "false" 21 | | SInt n -> string n 22 | | SFloat f -> string f 23 | | Symbol s -> s 24 | 25 | type SExpr = 26 | | Atom of Atom 27 | | SList of SExpr list 28 | 29 | override this.ToString() = 30 | match this with 31 | | Atom a -> string a 32 | | SList [] -> "()" 33 | | SList(x :: xs) -> 34 | let inner = List.map string xs |> List.fold (sprintf "%s %s") (string x) 35 | $"({inner})" 36 | 37 | let rec (|TypeSig|_|) = 38 | function 39 | | Atom(Symbol str) -> Map.tryFind str Type.StrMap 40 | | SList [ Atom(Symbol "->"); (TypeSig arg); (TypeSig ret) ] -> Some(TFun(arg, ret)) 41 | | SList [ Atom(Symbol "Ref"); (TypeSig ty) ] -> Some(TRef ty) 42 | | _ -> None 43 | 44 | let rec toAnnotatedAst sexpr = 45 | match sexpr with 46 | | SList [ Atom(Symbol "λ"); SList [ Atom(Symbol ":"); Atom(Symbol arg); (TypeSig ty) ]; 47 | body ] -> 48 | BResult.result { 49 | let! body = toAnnotatedAst body 50 | return AFun(arg, ty, body) 51 | } 52 | | SList [ Atom(Symbol "if"); cond; _then; _else ] -> 53 | BResult.result { 54 | let! cond = toAnnotatedAst cond 55 | let! _then = toAnnotatedAst _then 56 | let! _else = toAnnotatedAst _else 57 | return AIf(cond, _then, _else) 58 | } 59 | | SList [ Atom(Symbol "let"); 60 | SList [ Atom(Symbol ":"); Atom(Symbol name); (TypeSig ty) ]; value; body ] -> 61 | BResult.result { 62 | let! value = toAnnotatedAst value 63 | let! body = toAnnotatedAst body 64 | return ALet(name, ty, value, body) 65 | } 66 | | SList(Atom(Symbol "begin") :: x :: xs) -> 67 | BResult.result { 68 | let! x = toAnnotatedAst x 69 | let folder (state: Psyche.Base.Nel) (elem: SExpr) = 70 | let (Nel(head, tail)) = state 71 | BResult.result { 72 | let! expr = toAnnotatedAst elem 73 | return BNel.create head (tail @ [ expr ]) 74 | } 75 | let! body = BResult.fold folder (BNel.singleton x) xs 76 | return ABegin body 77 | } 78 | | SList [ Atom(Symbol "ref"); content ] -> 79 | BResult.result { 80 | let! content = toAnnotatedAst content 81 | return AMakeRef content 82 | } 83 | | SList [ Atom(Symbol "deref"); refExpr ] -> 84 | BResult.result { 85 | let! refExpr = toAnnotatedAst refExpr 86 | return ADeref refExpr 87 | } 88 | | SList [ Atom(Symbol "mut"); refSExp; sexp ] -> 89 | BResult.result { 90 | let! refExpr = toAnnotatedAst refSExp 91 | let! expr = toAnnotatedAst sexp 92 | return AMut(refExpr, expr) 93 | } 94 | | SList (x::xs) -> 95 | BResult.result { 96 | let! x = toAnnotatedAst x 97 | 98 | let folder innerAst sexpr = BResult.result { 99 | let! sexpr = toAnnotatedAst sexpr 100 | return AApp(innerAst, sexpr) 101 | } 102 | 103 | return! BResult.fold folder x xs 104 | } 105 | | SList [] -> Error $"bad syntax: {sexpr}" 106 | | Atom(SBool b) -> Ok(ABool b) 107 | | Atom(SInt n) -> Ok(AInt n) 108 | | Atom(SFloat f) -> Ok(AFloat f) 109 | | Atom(Symbol "#unit") -> Ok AUnit 110 | | Atom(Symbol x) -> Ok(AVar x) 111 | -------------------------------------------------------------------------------- /src/Psyche.Interpreter/Library.fs: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module Interpreter = 4 | module BOption = Base.Option 5 | module BResult = Base.Result 6 | 7 | open Psyche.Base.Nel.ActivePattern 8 | open Psyche.AST.UntypedAst 9 | open Psyche.AST.Value 10 | 11 | let evalBinExpr op lhs rhs = 12 | match (op, lhs, rhs) with 13 | | AddI, IntVal n1, IntVal n2 -> Ok(IntVal(n1 + n2)) 14 | | SubI, IntVal n1, IntVal n2 -> Ok(IntVal(n1 - n2)) 15 | | MulI, IntVal n1, IntVal n2 -> Ok(IntVal(n1 * n2)) 16 | | DivI, IntVal n1, IntVal n2 -> Ok(IntVal(n1 / n2)) 17 | | AddF, FloatVal f1, FloatVal f2 -> Ok(FloatVal(f1 + f2)) 18 | | SubF, FloatVal f1, FloatVal f2 -> Ok(FloatVal(f1 - f2)) 19 | | MulF, FloatVal f1, FloatVal f2 -> Ok(FloatVal(f1 * f2)) 20 | | DivF, FloatVal f1, FloatVal f2 -> Ok(FloatVal(f1 / f2)) 21 | | Mod, IntVal n1, IntVal n2 -> Ok(IntVal(n1 % n2)) 22 | | Eq, IntVal n1, IntVal n2 -> Ok(BoolVal((n1 = n2))) 23 | | Lt, IntVal n1, IntVal n2 -> Ok(BoolVal(n1 < n2)) 24 | | Le, IntVal n1, IntVal n2 -> Ok(BoolVal(n1 <= n2)) 25 | | _ -> 26 | Error $"2項演算子が用いられた式の評価に失敗しました:\n\t演算子: {op}\n\t左辺: {lhs}\n\t右辺: {rhs}" 27 | 28 | let rec eval env expr = 29 | match expr with 30 | | UUnit -> Ok UnitVal 31 | | UBool b -> Ok(BoolVal b) 32 | | UInt n -> Ok(IntVal n) 33 | | UFloat f -> Ok(FloatVal f) 34 | | UBinApp(op, lhs, rhs) -> 35 | BResult.result { 36 | let! lhs = eval env lhs 37 | let! rhs = eval env rhs 38 | return! evalBinExpr op lhs rhs } 39 | | UVar x -> evalVar env x 40 | | UFun(x, e) -> Ok(Closure(x, e, env)) 41 | | UIntOfFloat v -> 42 | BResult.result { 43 | let! v = eval env v 44 | match v with 45 | | FloatVal f -> return IntVal(int f) 46 | | _ -> return! Error $"cannot convert {v} into value of Float type" 47 | } 48 | | UFloatOfInt v -> 49 | BResult.result { 50 | let! v = eval env v 51 | match v with 52 | | IntVal n -> return FloatVal(float n) 53 | | _ -> return! Error $"cannot convert {v} into value of Int type" 54 | } 55 | | UApp(func, arg) -> 56 | BResult.result { 57 | let! func = eval env func 58 | let! arg = eval env arg 59 | return! evalApp func arg 60 | } 61 | | UIf(cond, _then, _else) -> 62 | BResult.result { 63 | let! cond = eval env cond 64 | return! evalIfExpr env cond _then _else 65 | } 66 | | ULet(x, e1, e2) -> 67 | BResult.result { 68 | let! e1 = eval env e1 69 | let env = Env.append x e1 env 70 | return! eval env e2 71 | } 72 | | UBegin(Nel(x, xs)) -> 73 | BResult.result { 74 | let! x = eval env x 75 | let folder (_: Value) (elem: UntypedAst) = eval env elem 76 | return! BResult.fold folder x xs 77 | } 78 | | UMakeRef e -> 79 | BResult.result { 80 | let! v = eval env e 81 | return RefVal(ref v) 82 | } 83 | | UDeref e -> 84 | BResult.result { 85 | let! value = eval env e 86 | match value with 87 | | RefVal r -> return !r 88 | | _ -> 89 | return! Error $"参照型ではない値に対して deref が呼び出されました: (deref {value} ..)" 90 | } 91 | | UMut(refExpr, expr) -> 92 | BResult.result { 93 | let! refVal = eval env refExpr 94 | let! value = eval env expr 95 | match refVal with 96 | | RefVal r -> 97 | r := value 98 | return value 99 | | _ -> 100 | return! Error $"参照型ではない値に対して mut が呼び出されました: (mut {refVal} ..)" 101 | } 102 | 103 | and evalVar env varId = 104 | Env.tryFind varId env 105 | |> BOption.toResult 106 | |> Result.mapError (fun () -> $"未束縛の名前を参照しました: {varId}") 107 | 108 | and evalIfExpr env cond _then _else = 109 | match cond with 110 | | BoolVal true -> eval env _then 111 | | BoolVal false -> eval env _else 112 | | _ -> Error "if 式の条件が真偽値ではありません" 113 | 114 | and evalApp f v = 115 | match f with 116 | | Closure(arg, body, fenv) -> eval (Env.append arg v fenv) body 117 | | _ -> Error "関数適用に失敗しました: 適用しようとしているものが関数ではありません" 118 | -------------------------------------------------------------------------------- /src/Psyche.CAM/Library.fs: -------------------------------------------------------------------------------- 1 | module Psyche.CAM 2 | 3 | type CamInstr = 4 | | CAMLdi of int 5 | | CAMLdb of bool 6 | | CAMAccess of int 7 | | CAMClosure of CamCode 8 | | CAMApply 9 | | CAMReturn 10 | | CAMLet 11 | | CAMEndLet 12 | | CAMTest of CamCode * CamCode 13 | | CAMAdd 14 | | CAMSub 15 | | CAMMul 16 | | CAMDiv 17 | | CAMMod 18 | | CAMEq 19 | | CAMLt 20 | | CAMLe 21 | 22 | and CamCode = CamInstr list 23 | 24 | type CamValue = 25 | | CAMIntVal of int 26 | | CAMBoolVal of bool 27 | | CAMClosureVal of CamCode * CamEnv 28 | 29 | and CamEnv = CamValue list 30 | 31 | type CamStack = CamValue list 32 | 33 | let rec run (code: CamCode) (env: CamEnv) (stack: CamStack) : (CamValue * CamEnv * CamStack) = 34 | match code with 35 | | [] -> (stack.[0], env, stack) 36 | | (CAMLdi i)::tail -> run tail env ((CAMIntVal i)::stack) 37 | | (CAMLdb b)::tail -> run tail env ((CAMBoolVal b)::stack) 38 | | (CAMAccess i)::tail -> run tail env (env.[i]::stack) 39 | | CAMApply::tail -> 40 | let closure = stack.[0] 41 | let argument = stack.[1] 42 | match closure with 43 | | CAMClosureVal (closureCode, closureEnv) -> 44 | run closureCode (argument::closure::closureEnv) (CAMClosureVal (tail, env)::stack.[2..]) 45 | | _ -> failwith "Invalid operation" 46 | | CAMReturn::_ -> 47 | let ret = stack.[0] 48 | let cont = stack.[1] 49 | match cont with 50 | | CAMClosureVal (closureCode, closureEnv) -> 51 | run closureCode closureEnv (ret::stack.[2..]) 52 | | _ -> failwith "Invalid operation" 53 | | (CAMClosure code)::tail -> 54 | run tail env ((CAMClosureVal (code, env))::stack) 55 | | CAMLet::tail -> 56 | run tail (stack.[0]::env) (stack.[1..]) 57 | | CAMEndLet::tail -> 58 | run tail (env.[1..]) stack 59 | | (CAMTest (c1, c2))::tail -> 60 | match stack.[0] with 61 | | CAMBoolVal true -> 62 | run (c1 @ tail) env stack.[1..] 63 | | CAMBoolVal false -> 64 | run (c2 @ tail) env stack.[1..] 65 | | _ -> failwith "Invalid operation" 66 | | CAMAdd::tail -> 67 | match (stack.[0], stack.[1]) with 68 | | (CAMIntVal rhs, CAMIntVal lhs) -> 69 | run tail env ((lhs + rhs |> CAMIntVal)::stack.[2..]) 70 | | _ -> failwith "Invalid operation" 71 | | CAMSub::tail -> 72 | match (stack.[0], stack.[1]) with 73 | | (CAMIntVal rhs, CAMIntVal lhs) -> 74 | run tail env ((lhs - rhs |> CAMIntVal)::stack.[2..]) 75 | | _ -> failwith "Invalid operation" 76 | | CAMMul::tail -> 77 | match (stack.[0], stack.[1]) with 78 | | (CAMIntVal rhs, CAMIntVal lhs) -> 79 | run tail env ((lhs * rhs |> CAMIntVal)::stack.[2..]) 80 | | _ -> failwith "Invalid operation" 81 | | CAMDiv::tail -> 82 | match (stack.[0], stack.[1]) with 83 | | (CAMIntVal rhs, CAMIntVal lhs) -> 84 | run tail env ((lhs / rhs |> CAMIntVal)::stack.[2..]) 85 | | _ -> failwith "Invalid operation" 86 | | CAMMod::tail -> 87 | match (stack.[0], stack.[1]) with 88 | | (CAMIntVal rhs, CAMIntVal lhs) -> 89 | run tail env ((lhs % rhs |> CAMIntVal)::stack.[2..]) 90 | | _ -> failwith "Invalid operation" 91 | | CAMEq::tail -> 92 | match (stack.[0], stack.[1]) with 93 | | (CAMIntVal rhs, CAMIntVal lhs) -> 94 | run tail env ((lhs = rhs |> CAMBoolVal)::stack.[2..]) 95 | | _ -> failwith "Invalid operation" 96 | | CAMLt::tail -> 97 | match (stack.[0], stack.[1]) with 98 | | (CAMIntVal rhs, CAMIntVal lhs) -> 99 | run tail env ((lhs < rhs |> CAMBoolVal)::stack.[2..]) 100 | | _ -> failwith "Invalid operation" 101 | | CAMLe::tail -> 102 | match (stack.[0], stack.[1]) with 103 | | (CAMIntVal rhs, CAMIntVal lhs) -> 104 | run tail env ((lhs <= rhs |> CAMBoolVal)::stack.[2..]) 105 | | _ -> failwith "Invalid operation" 106 | 107 | let startup () = 108 | let code = 109 | [ CAMClosure 110 | [ CAMLdi 1 111 | ; CAMAccess 0 112 | ; CAMEq 113 | ; CAMTest 114 | ( [ CAMLdi 1 ] 115 | , [ CAMAccess 0; CAMLdi 1; CAMSub; CAMAccess 1; CAMApply; CAMAccess 0; CAMAdd ] 116 | ) 117 | ; CAMReturn 118 | ] 119 | ; CAMLet 120 | ; CAMLdi 10 121 | ; CAMAccess 0 122 | ; CAMApply 123 | ; CAMEndLet 124 | ] 125 | let env = [] 126 | let stack = [] 127 | let (res, env', stack') = run code env stack 128 | printfn $"Result: %A{res}" 129 | printfn $"Env: %A{env'}" 130 | printfn $"Stack: %A{stack'}" 131 | -------------------------------------------------------------------------------- /src/Psyche.TypeChecker/Library.fs: -------------------------------------------------------------------------------- 1 | namespace Psyche 2 | 3 | module TypeChecker = 4 | module BNel = Psyche.Base.Nel 5 | module BOption = Psyche.Base.Option 6 | module BResult = Psyche.Base.Result 7 | 8 | open BNel.ActivePattern 9 | open Psyche.AST.Type 10 | open Psyche.AST.AnnotatedAst 11 | open Psyche.AST.UntypedAst 12 | 13 | let assertType (expected: Type) (actual: Type) = 14 | if expected = actual 15 | then Ok() 16 | else Error $"expected: {expected}, actual: {actual}" 17 | 18 | let rec typeCheck env = 19 | function 20 | | AUnit -> Ok(TUnit, UUnit) 21 | | ABool b -> Ok(TBool, UBool b) 22 | | AInt n -> Ok(TInt, UInt n) 23 | | AFloat f -> Ok(TFloat, UFloat f) 24 | | AVar x -> typeCheckVar env x 25 | | AFun(x, ty, body) -> typeCheckFun env x ty body 26 | | AApp(func, arg) -> typeCheckApp env func arg 27 | | AIf(cond, _then, _else) -> typeCheckIf env cond _then _else 28 | | ALet(x, ty, e1, e2) -> typeCheckLet env x ty e1 e2 29 | | ABegin body -> typeCheckBegin env body 30 | | AMakeRef expr -> typeCheckMakeRef env expr 31 | | ADeref expr -> typeCheckDeref env expr 32 | | AMut(refExpr, expr) -> typeCheckMut env refExpr expr 33 | 34 | and typeCheckVar env x = 35 | BResult.result { 36 | let! ty = TypeEnv.tryFind x env 37 | |> BOption.toResult 38 | |> Result.mapError 39 | (fun () -> $"(TypeError) Unbound identifier: {x}") 40 | return (ty, UVar x) 41 | } 42 | 43 | and typeCheckFun env x ty body = 44 | BResult.result { 45 | let! (bodyType, body) = typeCheck (TypeEnv.append x ty env) body 46 | return (TFun(ty, bodyType), UFun(x, body)) } 47 | 48 | and typeCheckApp env func arg = 49 | let mapError (r: Result<'a, string>) = 50 | r 51 | |> Result.mapError (sprintf "(TypeError) in function application:\n %s") 52 | BResult.result { 53 | let! (funcType, func) = typeCheck env func 54 | let! (argType, arg) = typeCheck env arg 55 | match funcType with 56 | | TFun(a, b) -> 57 | do! mapError (assertType a argType) 58 | return (b, UApp(func, arg)) 59 | | _ -> return! mapError (Error $"cannot call {func}: {funcType}") 60 | } 61 | 62 | and typeCheckLet env x ty e1 e2 = 63 | let mapError = Result.mapError (sprintf "(TypeError) in let expression: %O") 64 | BResult.result { 65 | let! (e1Type, e1) = typeCheck env e1 66 | do! mapError (assertType ty e1Type) 67 | let! (e2Type, e2) = typeCheck (TypeEnv.append x ty env) e2 68 | return (e2Type, ULet(x, e1, e2)) 69 | } 70 | 71 | and typeCheckIf env cond _then _else = 72 | let mapError = 73 | Result.mapError (sprintf "(TypeError) in if expression\n %O") 74 | BResult.result { 75 | let! (condType, cond) = typeCheck env cond 76 | do! mapError (assertType TBool condType) 77 | let! (_thenType, _then) = typeCheck env _then 78 | let! (_elseType, _else) = typeCheck env _else 79 | do! BResult.result { 80 | if _thenType = _elseType 81 | then return () 82 | else 83 | return! Error $"type mismatch\n then clause: {_thenType}\n else clause: {_elseType}" 84 | } 85 | |> mapError 86 | return (_thenType, UIf(cond, _then, _else)) 87 | } 88 | 89 | and typeCheckBegin env (Nel(head, tail)) = 90 | BResult.result { 91 | let! (ty, head) = typeCheck env head 92 | 93 | let folder (state: Type * Psyche.Base.Nel) (elem: AnnotatedAst) = 94 | let (_, Nel(x, xs)) = state 95 | BResult.result { 96 | let! (ty, expr) = typeCheck env elem 97 | return (ty, BNel.create x (xs @ [ expr ])) } 98 | let! (ty, body) = BResult.fold folder (ty, BNel.singleton head) tail 99 | 100 | return (ty, UBegin body) 101 | } 102 | 103 | and typeCheckMakeRef env expr = 104 | BResult.result { 105 | let! (exprType, expr) = typeCheck env expr 106 | return (TRef exprType, UMakeRef expr) } 107 | 108 | and typeCheckDeref env expr = 109 | BResult.result { 110 | let! (exprType, expr) = typeCheck env expr 111 | match exprType with 112 | | TRef ty -> return (ty, UDeref expr) 113 | | _ -> 114 | return! 115 | Error $"(TypeError) in deref expression:\n type {exprType} is not reference type" 116 | } 117 | 118 | and typeCheckMut env refExpr expr = 119 | let errMsgPrefix = "(TypeError) in mut expression:\n " 120 | BResult.result { 121 | let! (refExprType, refExpr) = typeCheck env refExpr 122 | match refExprType with 123 | | TRef(ty) -> 124 | let! (exprType, expr) = typeCheck env expr 125 | do! Result.mapError (sprintf "%s%s" errMsgPrefix) (assertType ty exprType) 126 | return (ty, UMut(refExpr, expr)) 127 | | _ -> 128 | return! Error $"{errMsgPrefix}type {refExprType} is not refernece type" 129 | } 130 | -------------------------------------------------------------------------------- /psyche.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26124.0 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FC53DA58-2501-4997-A801-295D3F7E5CE7}" 7 | EndProject 8 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.Base", "src\Psyche.Base\Psyche.Base.fsproj", "{C5224C77-4C35-4296-A19C-84E938A5B18C}" 9 | EndProject 10 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.Interpreter", "src\Psyche.Interpreter\Psyche.Interpreter.fsproj", "{CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}" 11 | EndProject 12 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.Parser", "src\Psyche.Parser\Psyche.Parser.fsproj", "{4FA5A5BC-B02C-4F8A-91E6-773E92551F67}" 13 | EndProject 14 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.Base.Test", "src\Psyche.Base.Test\Psyche.Base.Test.fsproj", "{C25548BF-1633-43DD-B29C-9FCF34729E84}" 15 | EndProject 16 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.CLI", "src\Psyche.CLI\Psyche.CLI.fsproj", "{0D98341F-974C-418A-B4B4-308F5E5D4D29}" 17 | EndProject 18 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.AST", "src\Psyche.AST\Psyche.AST.fsproj", "{1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}" 19 | EndProject 20 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ModDepsVisualizer", "src\ModDepsVisualizer\ModDepsVisualizer.fsproj", "{DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}" 21 | EndProject 22 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.TypeChecker", "src\Psyche.TypeChecker\Psyche.TypeChecker.fsproj", "{2811D780-D08A-4A06-BB0C-EF31C5C462C8}" 23 | EndProject 24 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.CAM", "src\Psyche.CAM\Psyche.CAM.fsproj", "{67262FEE-E285-47F4-B57C-397BD11D770F}" 25 | EndProject 26 | Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Psyche.Compiler", "src\Psyche.Compiler\Psyche.Compiler.fsproj", "{6AAABF90-C37E-4825-A621-6965698C8D27}" 27 | EndProject 28 | Global 29 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 30 | Debug|Any CPU = Debug|Any CPU 31 | Debug|x64 = Debug|x64 32 | Debug|x86 = Debug|x86 33 | Release|Any CPU = Release|Any CPU 34 | Release|x64 = Release|x64 35 | Release|x86 = Release|x86 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 41 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 42 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|Any CPU.Build.0 = Debug|Any CPU 43 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|x64.ActiveCfg = Debug|Any CPU 44 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|x64.Build.0 = Debug|Any CPU 45 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|x86.ActiveCfg = Debug|Any CPU 46 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Debug|x86.Build.0 = Debug|Any CPU 47 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|Any CPU.ActiveCfg = Release|Any CPU 48 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|Any CPU.Build.0 = Release|Any CPU 49 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|x64.ActiveCfg = Release|Any CPU 50 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|x64.Build.0 = Release|Any CPU 51 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|x86.ActiveCfg = Release|Any CPU 52 | {C5224C77-4C35-4296-A19C-84E938A5B18C}.Release|x86.Build.0 = Release|Any CPU 53 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 54 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|Any CPU.Build.0 = Debug|Any CPU 55 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|x64.ActiveCfg = Debug|Any CPU 56 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|x64.Build.0 = Debug|Any CPU 57 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|x86.ActiveCfg = Debug|Any CPU 58 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Debug|x86.Build.0 = Debug|Any CPU 59 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|Any CPU.ActiveCfg = Release|Any CPU 60 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|Any CPU.Build.0 = Release|Any CPU 61 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|x64.ActiveCfg = Release|Any CPU 62 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|x64.Build.0 = Release|Any CPU 63 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|x86.ActiveCfg = Release|Any CPU 64 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E}.Release|x86.Build.0 = Release|Any CPU 65 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 66 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|Any CPU.Build.0 = Debug|Any CPU 67 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|x64.ActiveCfg = Debug|Any CPU 68 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|x64.Build.0 = Debug|Any CPU 69 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|x86.ActiveCfg = Debug|Any CPU 70 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Debug|x86.Build.0 = Debug|Any CPU 71 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|Any CPU.ActiveCfg = Release|Any CPU 72 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|Any CPU.Build.0 = Release|Any CPU 73 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|x64.ActiveCfg = Release|Any CPU 74 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|x64.Build.0 = Release|Any CPU 75 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|x86.ActiveCfg = Release|Any CPU 76 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67}.Release|x86.Build.0 = Release|Any CPU 77 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 78 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|Any CPU.Build.0 = Debug|Any CPU 79 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|x64.ActiveCfg = Debug|Any CPU 80 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|x64.Build.0 = Debug|Any CPU 81 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|x86.ActiveCfg = Debug|Any CPU 82 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Debug|x86.Build.0 = Debug|Any CPU 83 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|Any CPU.ActiveCfg = Release|Any CPU 84 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|Any CPU.Build.0 = Release|Any CPU 85 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|x64.ActiveCfg = Release|Any CPU 86 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|x64.Build.0 = Release|Any CPU 87 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|x86.ActiveCfg = Release|Any CPU 88 | {C25548BF-1633-43DD-B29C-9FCF34729E84}.Release|x86.Build.0 = Release|Any CPU 89 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 90 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|Any CPU.Build.0 = Debug|Any CPU 91 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|x64.ActiveCfg = Debug|Any CPU 92 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|x64.Build.0 = Debug|Any CPU 93 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|x86.ActiveCfg = Debug|Any CPU 94 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Debug|x86.Build.0 = Debug|Any CPU 95 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|Any CPU.ActiveCfg = Release|Any CPU 96 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|Any CPU.Build.0 = Release|Any CPU 97 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|x64.ActiveCfg = Release|Any CPU 98 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|x64.Build.0 = Release|Any CPU 99 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|x86.ActiveCfg = Release|Any CPU 100 | {0D98341F-974C-418A-B4B4-308F5E5D4D29}.Release|x86.Build.0 = Release|Any CPU 101 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 102 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|Any CPU.Build.0 = Debug|Any CPU 103 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|x64.ActiveCfg = Debug|Any CPU 104 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|x64.Build.0 = Debug|Any CPU 105 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|x86.ActiveCfg = Debug|Any CPU 106 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Debug|x86.Build.0 = Debug|Any CPU 107 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|Any CPU.ActiveCfg = Release|Any CPU 108 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|Any CPU.Build.0 = Release|Any CPU 109 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|x64.ActiveCfg = Release|Any CPU 110 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|x64.Build.0 = Release|Any CPU 111 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|x86.ActiveCfg = Release|Any CPU 112 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3}.Release|x86.Build.0 = Release|Any CPU 113 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 114 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|Any CPU.Build.0 = Debug|Any CPU 115 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|x64.ActiveCfg = Debug|Any CPU 116 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|x64.Build.0 = Debug|Any CPU 117 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|x86.ActiveCfg = Debug|Any CPU 118 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Debug|x86.Build.0 = Debug|Any CPU 119 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|Any CPU.ActiveCfg = Release|Any CPU 120 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|Any CPU.Build.0 = Release|Any CPU 121 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|x64.ActiveCfg = Release|Any CPU 122 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|x64.Build.0 = Release|Any CPU 123 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|x86.ActiveCfg = Release|Any CPU 124 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F}.Release|x86.Build.0 = Release|Any CPU 125 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 126 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|Any CPU.Build.0 = Debug|Any CPU 127 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|x64.ActiveCfg = Debug|Any CPU 128 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|x64.Build.0 = Debug|Any CPU 129 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|x86.ActiveCfg = Debug|Any CPU 130 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Debug|x86.Build.0 = Debug|Any CPU 131 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|Any CPU.ActiveCfg = Release|Any CPU 132 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|Any CPU.Build.0 = Release|Any CPU 133 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|x64.ActiveCfg = Release|Any CPU 134 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|x64.Build.0 = Release|Any CPU 135 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|x86.ActiveCfg = Release|Any CPU 136 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8}.Release|x86.Build.0 = Release|Any CPU 137 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 138 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|Any CPU.Build.0 = Debug|Any CPU 139 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|x64.ActiveCfg = Debug|Any CPU 140 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|x64.Build.0 = Debug|Any CPU 141 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|x86.ActiveCfg = Debug|Any CPU 142 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Debug|x86.Build.0 = Debug|Any CPU 143 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|Any CPU.ActiveCfg = Release|Any CPU 144 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|Any CPU.Build.0 = Release|Any CPU 145 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|x64.ActiveCfg = Release|Any CPU 146 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|x64.Build.0 = Release|Any CPU 147 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|x86.ActiveCfg = Release|Any CPU 148 | {67262FEE-E285-47F4-B57C-397BD11D770F}.Release|x86.Build.0 = Release|Any CPU 149 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 150 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|Any CPU.Build.0 = Debug|Any CPU 151 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|x64.ActiveCfg = Debug|Any CPU 152 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|x64.Build.0 = Debug|Any CPU 153 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|x86.ActiveCfg = Debug|Any CPU 154 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Debug|x86.Build.0 = Debug|Any CPU 155 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|Any CPU.ActiveCfg = Release|Any CPU 156 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|Any CPU.Build.0 = Release|Any CPU 157 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|x64.ActiveCfg = Release|Any CPU 158 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|x64.Build.0 = Release|Any CPU 159 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|x86.ActiveCfg = Release|Any CPU 160 | {6AAABF90-C37E-4825-A621-6965698C8D27}.Release|x86.Build.0 = Release|Any CPU 161 | EndGlobalSection 162 | GlobalSection(NestedProjects) = preSolution 163 | {C5224C77-4C35-4296-A19C-84E938A5B18C} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 164 | {CC1AE525-B3DD-4E8B-9CFF-9F389061B81E} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 165 | {4FA5A5BC-B02C-4F8A-91E6-773E92551F67} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 166 | {C25548BF-1633-43DD-B29C-9FCF34729E84} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 167 | {0D98341F-974C-418A-B4B4-308F5E5D4D29} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 168 | {1D2DDD65-4E84-4E12-AFA4-EE7D415AE8D3} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 169 | {DF940080-C9A7-4A3D-8540-8EB8E4C9B04F} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 170 | {2811D780-D08A-4A06-BB0C-EF31C5C462C8} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 171 | {67262FEE-E285-47F4-B57C-397BD11D770F} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 172 | {6AAABF90-C37E-4825-A621-6965698C8D27} = {FC53DA58-2501-4997-A801-295D3F7E5CE7} 173 | EndGlobalSection 174 | EndGlobal 175 | -------------------------------------------------------------------------------- /paket.lock: -------------------------------------------------------------------------------- 1 | STORAGE: NONE 2 | RESTRICTION: == net50 3 | NUGET 4 | remote: https://api.nuget.org/v3/index.json 5 | Expecto (9.0.2) 6 | FSharp.Core (>= 4.6) 7 | Mono.Cecil (>= 0.11.2) 8 | Expecto.FsCheck (9.0.2) 9 | Expecto (>= 9.0.2) 10 | FsCheck (>= 2.14.2) 11 | FParsec (1.1.1) 12 | FSharp.Core (>= 4.3.4) 13 | FsCheck (2.14.3) 14 | FSharp.Core (>= 4.2.3) 15 | FSharp.Compiler.Service (37.0) 16 | FSharp.Core (>= 4.6.2) 17 | Microsoft.Build.Framework (>= 16.6) 18 | Microsoft.Build.Tasks.Core (>= 16.6) 19 | Microsoft.Build.Utilities.Core (>= 16.6) 20 | System.Buffers (>= 4.5) 21 | System.Collections.Immutable (>= 1.5) 22 | System.Memory (>= 4.5.3) 23 | System.Reflection.Emit (>= 4.3) 24 | System.Reflection.Metadata (>= 1.6) 25 | System.Reflection.TypeExtensions (>= 4.3) 26 | System.Runtime.Loader (>= 4.0) 27 | FSharp.Core (5.0) 28 | Microsoft.Build.Framework (16.7) 29 | System.Security.Permissions (>= 4.7) 30 | Microsoft.Build.Tasks.Core (16.7) 31 | Microsoft.Build.Framework (>= 16.7) 32 | Microsoft.Build.Utilities.Core (>= 16.7) 33 | Microsoft.Win32.Registry (>= 4.3) 34 | System.CodeDom (>= 4.4) 35 | System.Collections.Immutable (>= 1.5) 36 | System.Reflection.Metadata (>= 1.6) 37 | System.Reflection.TypeExtensions (>= 4.1) 38 | System.Resources.Extensions (>= 4.6) 39 | System.Security.Permissions (>= 4.7) 40 | System.Threading.Tasks.Dataflow (>= 4.9) 41 | Microsoft.Build.Utilities.Core (16.7) 42 | Microsoft.Build.Framework (>= 16.7) 43 | Microsoft.Win32.Registry (>= 4.3) 44 | System.Collections.Immutable (>= 1.5) 45 | System.Security.Permissions (>= 4.7) 46 | System.Text.Encoding.CodePages (>= 4.0.1) 47 | Microsoft.NETCore.Platforms (3.1.3) 48 | Microsoft.NETCore.Targets (3.1) 49 | Microsoft.Win32.Registry (4.7) 50 | System.Security.AccessControl (>= 4.7) 51 | System.Security.Principal.Windows (>= 4.7) 52 | Microsoft.Win32.SystemEvents (4.7) 53 | Microsoft.NETCore.Platforms (>= 3.1) 54 | Mono.Cecil (0.11.3) 55 | System.Buffers (4.5.1) 56 | System.CodeDom (4.7) 57 | System.Collections.Immutable (1.7.1) 58 | System.Drawing.Common (4.7) 59 | Microsoft.NETCore.Platforms (>= 3.1) 60 | Microsoft.Win32.SystemEvents (>= 4.7) 61 | System.IO (4.3) 62 | Microsoft.NETCore.Platforms (>= 1.1) 63 | Microsoft.NETCore.Targets (>= 1.1) 64 | System.Runtime (>= 4.3) 65 | System.Text.Encoding (>= 4.3) 66 | System.Threading.Tasks (>= 4.3) 67 | System.Memory (4.5.4) 68 | System.Reflection (4.3) 69 | Microsoft.NETCore.Platforms (>= 1.1) 70 | Microsoft.NETCore.Targets (>= 1.1) 71 | System.IO (>= 4.3) 72 | System.Reflection.Primitives (>= 4.3) 73 | System.Runtime (>= 4.3) 74 | System.Reflection.Emit (4.7) 75 | System.Reflection.Metadata (1.8.1) 76 | System.Reflection.Primitives (4.3) 77 | Microsoft.NETCore.Platforms (>= 1.1) 78 | Microsoft.NETCore.Targets (>= 1.1) 79 | System.Runtime (>= 4.3) 80 | System.Reflection.TypeExtensions (4.7) 81 | System.Resources.Extensions (4.7.1) 82 | System.Runtime (4.3.1) 83 | Microsoft.NETCore.Platforms (>= 1.1.1) 84 | Microsoft.NETCore.Targets (>= 1.1.3) 85 | System.Runtime.Loader (4.3) 86 | System.IO (>= 4.3) 87 | System.Reflection (>= 4.3) 88 | System.Runtime (>= 4.3) 89 | System.Security.AccessControl (4.7) 90 | Microsoft.NETCore.Platforms (>= 3.1) 91 | System.Security.Principal.Windows (>= 4.7) 92 | System.Security.Permissions (4.7) 93 | System.Security.AccessControl (>= 4.7) 94 | System.Windows.Extensions (>= 4.7) 95 | System.Security.Principal.Windows (4.7) 96 | System.Text.Encoding (4.3) 97 | Microsoft.NETCore.Platforms (>= 1.1) 98 | Microsoft.NETCore.Targets (>= 1.1) 99 | System.Runtime (>= 4.3) 100 | System.Text.Encoding.CodePages (4.7.1) 101 | Microsoft.NETCore.Platforms (>= 3.1.1) 102 | System.Threading.Tasks (4.3) 103 | Microsoft.NETCore.Platforms (>= 1.1) 104 | Microsoft.NETCore.Targets (>= 1.1) 105 | System.Runtime (>= 4.3) 106 | System.Threading.Tasks.Dataflow (4.11.1) 107 | System.Windows.Extensions (4.7) 108 | System.Drawing.Common (>= 4.7) 109 | 110 | GROUP NetcoreBuild 111 | NUGET 112 | remote: https://api.nuget.org/v3/index.json 113 | BlackFox.VsWhere (1.1) - restriction: >= netstandard2.0 114 | FSharp.Core (>= 4.0.0.1) - restriction: >= net45 115 | FSharp.Core (>= 4.2.3) - restriction: && (< net45) (>= netstandard2.0) 116 | Microsoft.Win32.Registry (>= 4.7) - restriction: && (< net45) (>= netstandard2.0) 117 | Fake.Core.CommandLineParsing (5.20.3) - restriction: >= netstandard2.0 118 | FParsec (>= 1.1.1) - restriction: >= netstandard2.0 119 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 120 | Fake.Core.Context (5.20.3) - restriction: >= netstandard2.0 121 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 122 | Fake.Core.Environment (5.20.3) - restriction: >= netstandard2.0 123 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 124 | Fake.Core.FakeVar (5.20.3) - restriction: >= netstandard2.0 125 | Fake.Core.Context (>= 5.20.3) - restriction: >= netstandard2.0 126 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 127 | Fake.Core.Process (5.20.3) - restriction: >= netstandard2.0 128 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 129 | Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 130 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 131 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 132 | Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 133 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 134 | System.Collections.Immutable (>= 1.7.1) - restriction: >= netstandard2.0 135 | Fake.Core.SemVer (5.20.3) - restriction: >= netstandard2.0 136 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 137 | Fake.Core.String (5.20.3) - restriction: >= netstandard2.0 138 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 139 | Fake.Core.Target (5.20.3) 140 | Fake.Core.CommandLineParsing (>= 5.20.3) - restriction: >= netstandard2.0 141 | Fake.Core.Context (>= 5.20.3) - restriction: >= netstandard2.0 142 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 143 | Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 144 | Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 145 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 146 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 147 | FSharp.Control.Reactive (>= 4.4.2) - restriction: >= netstandard2.0 148 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 149 | Fake.Core.Tasks (5.20.3) - restriction: >= netstandard2.0 150 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 151 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 152 | Fake.Core.Trace (5.20.3) - restriction: >= netstandard2.0 153 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 154 | Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 155 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 156 | Fake.Core.Xml (5.20.3) - restriction: >= netstandard2.0 157 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 158 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 159 | Fake.DotNet.Cli (5.20.3) 160 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 161 | Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 162 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 163 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 164 | Fake.DotNet.MSBuild (>= 5.20.3) - restriction: >= netstandard2.0 165 | Fake.DotNet.NuGet (>= 5.20.3) - restriction: >= netstandard2.0 166 | Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 167 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 168 | Mono.Posix.NETStandard (>= 1.0) - restriction: >= netstandard2.0 169 | Newtonsoft.Json (>= 12.0.3) - restriction: >= netstandard2.0 170 | Fake.DotNet.MSBuild (5.20.3) - restriction: >= netstandard2.0 171 | BlackFox.VsWhere (>= 1.1) - restriction: >= netstandard2.0 172 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 173 | Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 174 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 175 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 176 | Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 177 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 178 | MSBuild.StructuredLogger (>= 2.1.176) - restriction: >= netstandard2.0 179 | Fake.DotNet.NuGet (5.20.3) - restriction: >= netstandard2.0 180 | Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 181 | Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 182 | Fake.Core.SemVer (>= 5.20.3) - restriction: >= netstandard2.0 183 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 184 | Fake.Core.Tasks (>= 5.20.3) - restriction: >= netstandard2.0 185 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 186 | Fake.Core.Xml (>= 5.20.3) - restriction: >= netstandard2.0 187 | Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 188 | Fake.Net.Http (>= 5.20.3) - restriction: >= netstandard2.0 189 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 190 | Newtonsoft.Json (>= 12.0.3) - restriction: >= netstandard2.0 191 | NuGet.Protocol (>= 5.6) - restriction: >= netstandard2.0 192 | Fake.IO.FileSystem (5.20.3) - restriction: >= netstandard2.0 193 | Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 194 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 195 | Fake.Net.Http (5.20.3) - restriction: >= netstandard2.0 196 | Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 197 | FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 198 | FParsec (1.1.1) - restriction: >= netstandard2.0 199 | FSharp.Core (>= 4.3.4) - restriction: || (>= net45) (>= netstandard2.0) 200 | System.ValueTuple (>= 4.4) - restriction: >= net45 201 | FSharp.Control.Reactive (4.4.2) - restriction: >= netstandard2.0 202 | FSharp.Core (>= 4.7.2) - restriction: || (>= net46) (>= netstandard2.0) 203 | System.Reactive (>= 4.4.1) - restriction: || (>= net46) (>= netstandard2.0) 204 | FSharp.Core (5.0) - restriction: >= netstandard2.0 205 | Microsoft.Bcl.AsyncInterfaces (1.1.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) 206 | System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net461) (&& (< netcoreapp2.1) (>= netstandard2.0)) (>= netstandard2.1) 207 | Microsoft.Build (16.7) - restriction: >= netstandard2.0 208 | Microsoft.Build.Framework (>= 16.7) - restriction: || (>= net472) (>= netcoreapp2.1) 209 | Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 210 | Microsoft.Win32.Registry (>= 4.3) - restriction: >= netcoreapp2.1 211 | System.Collections.Immutable (>= 1.5) - restriction: || (>= net472) (>= netcoreapp2.1) 212 | System.Memory (>= 4.5.3) - restriction: || (>= net472) (>= netcoreapp2.1) 213 | System.Reflection.Metadata (>= 1.6) - restriction: >= netcoreapp2.1 214 | System.Security.Principal.Windows (>= 4.7) - restriction: >= netcoreapp2.1 215 | System.Text.Encoding.CodePages (>= 4.0.1) - restriction: >= netcoreapp2.1 216 | System.Text.Json (>= 4.7) - restriction: || (>= net472) (>= netcoreapp2.1) 217 | System.Threading.Tasks.Dataflow (>= 4.9) - restriction: || (>= net472) (>= netcoreapp2.1) 218 | Microsoft.Build.Framework (16.7) - restriction: >= netstandard2.0 219 | System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) 220 | Microsoft.Build.Tasks.Core (16.7) - restriction: >= netstandard2.0 221 | Microsoft.Build.Framework (>= 16.7) - restriction: >= netstandard2.0 222 | Microsoft.Build.Utilities.Core (>= 16.7) - restriction: >= netstandard2.0 223 | Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 224 | Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 225 | System.CodeDom (>= 4.4) - restriction: && (< net472) (>= netstandard2.0) 226 | System.Collections.Immutable (>= 1.5) - restriction: >= netstandard2.0 227 | System.Reflection.Metadata (>= 1.6) - restriction: && (< net472) (>= netstandard2.0) 228 | System.Reflection.TypeExtensions (>= 4.1) - restriction: && (< net472) (>= netstandard2.0) 229 | System.Resources.Extensions (>= 4.6) - restriction: >= netstandard2.0 230 | System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) 231 | System.Threading.Tasks.Dataflow (>= 4.9) - restriction: >= netstandard2.0 232 | Microsoft.Build.Utilities.Core (16.7) - restriction: >= netstandard2.0 233 | Microsoft.Build.Framework (>= 16.7) - restriction: >= netstandard2.0 234 | Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 235 | Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 236 | System.Collections.Immutable (>= 1.5) - restriction: >= netstandard2.0 237 | System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) 238 | System.Text.Encoding.CodePages (>= 4.0.1) - restriction: && (< net472) (>= netstandard2.0) 239 | Microsoft.NETCore.Platforms (3.1.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= netcoreapp2.0) 240 | Microsoft.NETCore.Targets (3.1) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 241 | Microsoft.VisualStudio.Setup.Configuration.Interop (1.16.30) - restriction: >= net472 242 | Microsoft.Win32.Primitives (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 243 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 244 | Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 245 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 246 | Microsoft.Win32.Registry (4.7) - restriction: || (&& (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) 247 | System.Buffers (>= 4.5) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 248 | System.Memory (>= 4.5.3) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) 249 | System.Security.AccessControl (>= 4.7) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 250 | System.Security.Principal.Windows (>= 4.7) - restriction: || (>= monoandroid) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 251 | Microsoft.Win32.SystemEvents (4.7) - restriction: >= netcoreapp3.0 252 | Microsoft.NETCore.Platforms (>= 3.1) - restriction: >= netcoreapp2.0 253 | Mono.Posix.NETStandard (1.0) - restriction: >= netstandard2.0 254 | MSBuild.StructuredLogger (2.1.215) - restriction: >= netstandard2.0 255 | Microsoft.Build (>= 16.4) - restriction: >= netstandard2.0 256 | Microsoft.Build.Framework (>= 16.4) - restriction: >= netstandard2.0 257 | Microsoft.Build.Tasks.Core (>= 16.4) - restriction: >= netstandard2.0 258 | Microsoft.Build.Utilities.Core (>= 16.4) - restriction: >= netstandard2.0 259 | Newtonsoft.Json (12.0.3) - restriction: >= netstandard2.0 260 | NuGet.Common (5.7) - restriction: >= netstandard2.0 261 | NuGet.Frameworks (>= 5.7) - restriction: >= netstandard2.0 262 | System.Diagnostics.Process (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 263 | System.Threading.Thread (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 264 | NuGet.Configuration (5.7) - restriction: >= netstandard2.0 265 | NuGet.Common (>= 5.7) - restriction: >= netstandard2.0 266 | System.Security.Cryptography.ProtectedData (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 267 | NuGet.Frameworks (5.7) - restriction: >= netstandard2.0 268 | NuGet.Packaging (5.6) 269 | Newtonsoft.Json (>= 9.0.1) - restriction: >= netstandard2.0 270 | NuGet.Configuration (>= 5.6) - restriction: >= netstandard2.0 271 | NuGet.Versioning (>= 5.6) - restriction: >= netstandard2.0 272 | System.Dynamic.Runtime (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 273 | NuGet.Protocol (5.6) - restriction: >= netstandard2.0 274 | NuGet.Packaging (>= 5.6) - restriction: >= netstandard2.0 275 | System.Dynamic.Runtime (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) 276 | NuGet.Versioning (5.7) - restriction: >= netstandard2.0 277 | runtime.native.System (4.3.1) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 278 | Microsoft.NETCore.Platforms (>= 1.1.1) 279 | Microsoft.NETCore.Targets (>= 1.1.3) 280 | System.Buffers (4.5.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monoandroid) (>= netstandard2.0)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.1)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) 281 | System.CodeDom (4.7) - restriction: && (< net472) (>= netstandard2.0) 282 | System.Collections (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 283 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 284 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 285 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 286 | System.Collections.Immutable (1.7.1) - restriction: || (&& (>= net461) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.1)) (&& (>= netcoreapp2.1) (< netstandard1.1)) (>= netstandard2.0) 287 | System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net46) (< netstandard2.0)) (>= net461) (>= uap10.1) 288 | System.ComponentModel (4.3) - restriction: && (>= netstandard2.0) (>= uap10.0) 289 | System.Diagnostics.Contracts (4.3) - restriction: >= net50 290 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 291 | System.Diagnostics.Debug (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 292 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 293 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 294 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 295 | System.Diagnostics.Process (4.3) - restriction: && (< net472) (>= netstandard2.0) 296 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 297 | Microsoft.Win32.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 298 | Microsoft.Win32.Registry (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 299 | runtime.native.System (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 300 | System.Collections (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 301 | System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 302 | System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 303 | System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) 304 | System.IO.FileSystem (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 305 | System.IO.FileSystem.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 306 | System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 307 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) 308 | System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 309 | System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) 310 | System.Runtime.InteropServices (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 311 | System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) 312 | System.Text.Encoding.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 313 | System.Threading (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 314 | System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 315 | System.Threading.Thread (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 316 | System.Threading.ThreadPool (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 317 | System.Drawing.Common (4.7) - restriction: >= netcoreapp3.0 318 | Microsoft.NETCore.Platforms (>= 3.1) - restriction: >= netcoreapp2.0 319 | Microsoft.Win32.SystemEvents (>= 4.7) - restriction: >= netcoreapp2.0 320 | System.Dynamic.Runtime (4.3) - restriction: || (&& (< net472) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.0)) 321 | System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 322 | System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 323 | System.Globalization (>= 4.3) - restriction: >= net50 324 | System.Linq (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 325 | System.Linq.Expressions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 326 | System.ObjectModel (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 327 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 328 | System.Reflection.Emit (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< net50) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 329 | System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< net50) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 330 | System.Reflection.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< net50) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 331 | System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 332 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 333 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 334 | System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 335 | System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 336 | System.Globalization (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 337 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 338 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 339 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 340 | System.IO (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 341 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 342 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 343 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 344 | System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 345 | System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 346 | System.IO.FileSystem (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 347 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 348 | Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 349 | System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 350 | System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net46) 351 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 352 | System.Runtime.Handles (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 353 | System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 354 | System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 355 | System.IO.FileSystem.Primitives (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 356 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 357 | System.Linq (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 358 | System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (>= net50) 359 | System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 360 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 361 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (>= net50) 362 | System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 363 | System.Linq.Expressions (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 364 | System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 365 | System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 366 | System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 367 | System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 368 | System.Linq (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 369 | System.ObjectModel (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< net50) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 370 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.6) (< win8) (< wpa81)) (>= net50) 371 | System.Reflection.Emit (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< net50) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 372 | System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 373 | System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 374 | System.Reflection.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 375 | System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 376 | System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 377 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 378 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.6) (< win8) (< wpa81)) (>= net50) 379 | System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 380 | System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 381 | System.Linq.Queryable (4.3) - restriction: && (>= netstandard2.0) (>= uap10.0) 382 | System.Memory (4.5.4) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (>= netcoreapp2.1) (&& (>= netstandard2.0) (>= uap10.1)) 383 | System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 384 | System.Numerics.Vectors (>= 4.4) - restriction: && (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 385 | System.Numerics.Vectors (>= 4.5) - restriction: >= net461 386 | System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (>= monoandroid) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 387 | System.Numerics.Vectors (4.5) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net461) (>= netcoreapp2.1)) (&& (>= net461) (>= netstandard2.0)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netstandard2.0) (>= uap10.1)) 388 | System.ObjectModel (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 389 | System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 390 | System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 391 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 392 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 393 | System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 394 | System.Reactive (4.4.1) - restriction: >= netstandard2.0 395 | System.ComponentModel (>= 4.0.1) - restriction: && (>= uap10.0) (< uap10.1) 396 | System.Dynamic.Runtime (>= 4.0.11) - restriction: && (>= uap10.0) (< uap10.1) 397 | System.Linq.Queryable (>= 4.0.1) - restriction: && (>= uap10.0) (< uap10.1) 398 | System.Runtime.InteropServices.WindowsRuntime (>= 4.3) - restriction: && (< net46) (< netcoreapp3.0) (>= netstandard2.0) (< uap10.0) 399 | System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net46) (&& (< netcoreapp3.0) (>= netstandard2.0)) (>= uap10.0) 400 | System.ValueTuple (>= 4.5) - restriction: || (>= net46) (&& (>= uap10.0) (< uap10.1)) 401 | System.Reflection (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp1.1) (>= netstandard2.0)) (>= net50) 402 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 403 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 404 | System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 405 | System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 406 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 407 | System.Reflection.Emit (4.7) - restriction: && (< monoandroid) (< net45) (< net50) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) 408 | System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= net50) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) 409 | System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (>= net50) (&& (>= netstandard2.0) (< portable-net45+wp8) (< win8)) (&& (>= netstandard2.0) (>= uap10.1) (< win8) (< wpa81)) 410 | System.Reflection.Emit.Lightweight (4.7) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 411 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (>= net50) 412 | System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (>= net50) (&& (< netstandard2.0) (>= wpa81)) (&& (>= portable-net45+win8+wp8+wpa81) (< portable-net45+wp8) (< win8)) (&& (< portable-net45+wp8) (>= win8)) (>= uap10.1) 413 | System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (>= net50) 414 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (>= net50) 415 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (>= net50) 416 | System.Reflection.Extensions (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 417 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 418 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 419 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 420 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 421 | System.Reflection.Metadata (1.8.1) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) 422 | System.Collections.Immutable (>= 1.7.1) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp3.1) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) 423 | System.Reflection.Primitives (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= net50) 424 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 425 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 426 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 427 | System.Reflection.TypeExtensions (4.7) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) (>= net50) 428 | System.Diagnostics.Contracts (>= 4.3) - restriction: >= net50 429 | System.Diagnostics.Debug (>= 4.3) - restriction: >= net50 430 | System.Linq (>= 4.3) - restriction: >= net50 431 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.5) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.5) (< uap10.1)) (>= net50) 432 | System.Reflection.Primitives (>= 4.3) - restriction: >= net50 433 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.5) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.5) (< uap10.1)) (>= net50) 434 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.5) (< netstandard2.0) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.5) (< uap10.1)) (>= net50) 435 | System.Runtime.Extensions (>= 4.3) - restriction: >= net50 436 | System.Resources.Extensions (4.7.1) - restriction: >= netstandard2.0 437 | System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) 438 | System.Resources.ResourceManager (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 439 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 440 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 441 | System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 442 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 443 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 444 | System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 445 | Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 446 | Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 447 | System.Runtime.CompilerServices.Unsafe (4.7.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= net461) (>= netcoreapp2.1)) (&& (>= net461) (>= netstandard2.0)) (&& (>= net461) (>= xamarinios)) (&& (>= net461) (>= xamarinmac)) (>= net472) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.1)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= uap10.1) (>= xamarinios)) (&& (>= uap10.1) (>= xamarinmac)) 448 | System.Runtime.Extensions (4.3.1) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 449 | Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 450 | Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 451 | System.Runtime (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net50) 452 | System.Runtime.Handles (4.3) - restriction: || (&& (< monoandroid) (< net45) (< net50) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (>= netcoreapp1.1) (< net50) (>= netstandard2.0)) 453 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 454 | Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 455 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 456 | System.Runtime.InteropServices (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 457 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) 458 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) 459 | System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) 460 | System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) 461 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net462) (>= netcoreapp1.1) 462 | System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) 463 | System.Runtime.InteropServices.WindowsRuntime (4.3) - restriction: && (< net46) (< netcoreapp3.0) (>= netstandard2.0) (< uap10.0) 464 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net50) 465 | System.Security.AccessControl (4.7) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) 466 | Microsoft.NETCore.Platforms (>= 3.1) - restriction: >= netcoreapp2.0 467 | System.Security.Principal.Windows (>= 4.7) - restriction: || (&& (>= net46) (< netstandard2.0)) (&& (< net46) (>= netstandard1.3) (< netstandard2.0) (< uap10.1)) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) 468 | System.Security.Cryptography.ProtectedData (4.7) - restriction: && (< net472) (>= netstandard2.0) 469 | System.Memory (>= 4.5.3) - restriction: && (< monoandroid) (< net46) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 470 | System.Security.Permissions (4.7) - restriction: && (< net472) (>= netstandard2.0) 471 | System.Security.AccessControl (>= 4.7) - restriction: || (>= net461) (>= netstandard2.0) 472 | System.Windows.Extensions (>= 4.7) - restriction: >= netcoreapp3.0 473 | System.Security.Principal.Windows (4.7) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) 474 | Microsoft.NETCore.Platforms (>= 3.1) - restriction: || (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) 475 | System.Text.Encoding (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 476 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 477 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 478 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 479 | System.Text.Encoding.CodePages (4.7.1) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) 480 | Microsoft.NETCore.Platforms (>= 3.1.1) - restriction: >= netcoreapp2.0 481 | System.Runtime.CompilerServices.Unsafe (>= 4.7.1) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp3.1)) 482 | System.Text.Encoding.Extensions (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 483 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 484 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 485 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 486 | System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 487 | System.Text.Encodings.Web (4.7.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) 488 | System.Memory (>= 4.5.4) - restriction: || (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< netstandard2.1)) (>= net461) (>= uap10.1) 489 | System.Text.Json (4.7.2) - restriction: || (>= net472) (>= netcoreapp2.1) 490 | Microsoft.Bcl.AsyncInterfaces (>= 1.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 491 | System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 492 | System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) 493 | System.Numerics.Vectors (>= 4.5) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) 494 | System.Runtime.CompilerServices.Unsafe (>= 4.7.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 495 | System.Text.Encodings.Web (>= 4.7.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) 496 | System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) 497 | System.ValueTuple (>= 4.5) - restriction: >= net461 498 | System.Threading (4.3) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 499 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 500 | System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 501 | System.Threading.Tasks (4.3) - restriction: || (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net50) 502 | Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 503 | Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 504 | System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= net50) 505 | System.Threading.Tasks.Dataflow (4.11.1) - restriction: >= netstandard2.0 506 | System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (>= net46) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.0)) 507 | System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< win8)) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= wp8) 508 | System.Threading.Thread (4.3) - restriction: || (&& (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) 509 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 510 | System.Threading.ThreadPool (4.3) - restriction: && (< monoandroid) (< net46) (< net50) (>= netstandard2.0) (< xamarinios) (< xamarinmac) 511 | System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 512 | System.Runtime.Handles (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< net50) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) 513 | System.ValueTuple (4.5) - restriction: || (&& (>= net45) (>= netstandard2.0)) (&& (>= net46) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (>= netstandard2.0) (>= uap10.0)) 514 | System.Windows.Extensions (4.7) - restriction: >= netcoreapp3.0 515 | System.Drawing.Common (>= 4.7) - restriction: >= netcoreapp3.0 516 | --------------------------------------------------------------------------------