diff --git a/F#/ParseTree.Test/ParseTree.Test.fsproj b/F#/ParseTree.Test/ParseTree.Test.fsproj
new file mode 100644
index 0000000..0f60d35
--- /dev/null
+++ b/F#/ParseTree.Test/ParseTree.Test.fsproj
@@ -0,0 +1,29 @@
+
+
+
+ net8.0
+
+ false
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/F#/ParseTree.Test/ParseTreeTest.fs b/F#/ParseTree.Test/ParseTreeTest.fs
new file mode 100644
index 0000000..176b69d
--- /dev/null
+++ b/F#/ParseTree.Test/ParseTreeTest.fs
@@ -0,0 +1,32 @@
+module ParseTree.Test
+
+open NUnit.Framework
+open FsUnit
+
+[]
+let ValueParseTreeTest () =
+ Value 1 |> calulateParseTree |> should equal 1
+
+[]
+let SumParseTreeTest () =
+ Add(Value 1, Value 2) |> calulateParseTree |> should equal 3
+
+[]
+let SubtractParseTreeTest () =
+ Subtract(Value 1, Value 2) |> calulateParseTree |> should equal -1
+
+[]
+let MultiplyParseTreeTest () =
+ Multiply(Value 1, Value 4) |> calulateParseTree |> should equal 4
+
+[]
+let DivideParseTreeTest () =
+ Divide(Value 5, Value 2) |> calulateParseTree |> should equal 2
+
+[]
+let DivideZeroParseTreeTest () =
+ (fun () -> Divide(Value 5, Value 0) |> calulateParseTree |> ignore) |> should throw typeof
+
+[]
+let ActualParseTreeTest () =
+ Add(Value 2, Multiply(Divide(Value 6, Value 2), Value 2)) |> calulateParseTree |> should equal 8
diff --git a/F#/ParseTree/ParseTree.fs b/F#/ParseTree/ParseTree.fs
new file mode 100644
index 0000000..7491873
--- /dev/null
+++ b/F#/ParseTree/ParseTree.fs
@@ -0,0 +1,25 @@
+module ParseTree
+
+type MaybeBuilder() =
+ member this.Bind(m, f) = Option.bind f m
+ member this.Return(x) =
+ Some x
+ member this.ReturnFrom(m) =
+ m
+
+let maybe = new MaybeBuilder()
+
+type ParseTree<'T> =
+ | Value of 'T
+ | Add of ParseTree<'T> * ParseTree<'T>
+ | Subtract of ParseTree<'T> * ParseTree<'T>
+ | Divide of ParseTree<'T> * ParseTree<'T>
+ | Multiply of ParseTree<'T> * ParseTree<'T>
+
+let rec calulateParseTree tree =
+ match tree with
+ | Value value -> value
+ | Add (lhs, rhs) -> calulateParseTree lhs + calulateParseTree rhs
+ | Subtract (lhs, rhs) -> calulateParseTree lhs - calulateParseTree rhs
+ | Multiply (lhs, rhs) -> calulateParseTree lhs * calulateParseTree rhs
+ | Divide (lhs, rhs) -> calulateParseTree lhs / calulateParseTree rhs
diff --git a/F#/ParseTree/ParseTree.fsproj b/F#/ParseTree/ParseTree.fsproj
new file mode 100644
index 0000000..3756dd0
--- /dev/null
+++ b/F#/ParseTree/ParseTree.fsproj
@@ -0,0 +1,12 @@
+
+
+
+ net8.0
+ true
+
+
+
+
+
+
+
diff --git a/F#/forSpbu.sln b/F#/forSpbu.sln
index 9d54d03..eb92715 100644
--- a/F#/forSpbu.sln
+++ b/F#/forSpbu.sln
@@ -21,6 +21,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}"
EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ParseTree", "ParseTree\ParseTree.fsproj", "{AA554FFB-4385-4C2F-BF0E-947C705626D4}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ParseTree.Test", "ParseTree.Test\ParseTree.Test.fsproj", "{63396A84-710E-4539-8570-46F80B88D933}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -58,6 +62,14 @@ Global
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA554FFB-4385-4C2F-BF0E-947C705626D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AA554FFB-4385-4C2F-BF0E-947C705626D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA554FFB-4385-4C2F-BF0E-947C705626D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AA554FFB-4385-4C2F-BF0E-947C705626D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {63396A84-710E-4539-8570-46F80B88D933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {63396A84-710E-4539-8570-46F80B88D933}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {63396A84-710E-4539-8570-46F80B88D933}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {63396A84-710E-4539-8570-46F80B88D933}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{7937CDA8-8285-4E23-AD1A-FC0F04FEEFE6} = {91E3BDA2-0836-46C2-95F0-02513FD7F13F}