Simplee.Goa 1.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Simplee.Goa --version 1.0.1                
NuGet\Install-Package Simplee.Goa -Version 1.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Simplee.Goa" Version="1.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Simplee.Goa --version 1.0.1                
#r "nuget: Simplee.Goa, 1.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Simplee.Goa as a Cake Addin
#addin nuget:?package=Simplee.Goa&version=1.0.1

// Install Simplee.Goa as a Cake Tool
#tool nuget:?package=Simplee.Goa&version=1.0.1                

simplee |> goa

Project which implements lambda calculus parser, and interpreter.

goa |> AST

Contains the definitions of the lambda calculus grammar. Here is an example of the lambda terms:

type GIdentifier = string

type GExpression =
   | GVar      of GIdentifier
   | GApp      of GExpression * GExpression
   | GLambda   of GIdentifier * GExpression

goa |> ofstr

Parses strings and converts them to lambda expressions. The implementation is using the FParse library. Here are several examples of valid strings which are parsed into lambda expressions. In the following example, we get a lambda expression from a given string.

"""\x -> (x y)""" |> gexpr
"""\a b -> b""" |> gexpr

The results of parsing these strings are equivalent to the following lambda expressions built using the provided infix operators:

"x" .>> ("x" .<<. "y")
"a" .>> ("b" .>> ("b" |> gvar))

goa |> combinators

The library provides the standard lambda combinators: S, K, I, M, KI, C, B, Th, B1, V

goa |> eval

The library implements normalization function for lambda expression using beta reduction.

let lam = "x" |> gvar |> glambda "x"
let body = "y" |> gvar
let term = gapp lam body

let fail' a = 
    fail 
        nm 
        (sprintf "The app /w lambda failed. s=[%s] e=[%s] a=[%s]" (term |> gte2str) (body |> gte2str) (a |> gte2str))

match term |> eval (fun _ -> None) with
| t when t = ("y" |> gvar) ->
    pass nm
| t ->
    fail' t

goa |> bool

The library defines Boolean algebra (GTrue, GFalse, GNot, GOr, GAnd, GBeq)

GNot << GTrue
|> norm (fun _ -> None)
|> gte2str
|> function
    | s when s = "λa b.b" -> Ok ()
    | s -> s |> sprintf "The not True is not GFalse [%s]" |> Error


GAnd << GTrue << GFalse
|> norm (fun _ -> None)
|> gte2str
|> function
    | s when s = "λb x.x" -> Ok ()
    | s -> s |> sprintf "The AND True False is not GFalse [%s]" |> Error
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 is compatible.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Added more combinators: S, K, I, M, KI, C, B, Th, V, B1. Added more infix operators for building lambda expressions.