If Don had intended us not to use operators, he would have left them out of the language

This commit is contained in:
Smaug123
2020-05-02 15:32:48 +01:00
parent 8e3cd2a1a1
commit 0e6316bf2a
2 changed files with 8 additions and 11 deletions

View File

@@ -15,20 +15,17 @@ module TestVector =
|> Vector.cons 6
v1 |> Vector.toList |> shouldEqual [6 ; 5 ; 3]
let v2 = Vector.empty |> Vector.cons "hi" |> Vector.cons "bye"
let v2 = "bye" ** "hi" ** -()
v2 |> Vector.toList |> shouldEqual ["bye" ; "hi"]
[<Test>]
let ``Pattern matching`` () =
match Vector.empty with
match -() with
| Empty () -> ()
//| Vec (a, b) -> failwith "" -- doesn't compile
let v1 =
Vector.empty
|> Vector.cons 3
|> Vector.cons 5
|> Vector.cons 6
6 ** 5 ** 3 ** -()
match v1 with
| Vec (a , b) ->
@@ -45,10 +42,7 @@ module TestVector =
[<Test>]
let ``Vector concatenation`` () =
let v1 =
Vector.empty
|> Vector.cons 3
|> Vector.cons 5
|> Vector.cons 6
6 ** 5 ** 3 ** -()
let twice = Vector.append v1 v1
let otherTwice =

View File

@@ -74,4 +74,7 @@ module Patterns =
let (|Vec|) (Vector v : Vector<'a, S<'n>>) : 'a * Vector<'a, 'n> =
List.head v, Vector (List.tail v)
let (|Empty|) (_ : Vector<'a, Z>) = ()
let (|Empty|) (_ : Vector<'a, Z>) = ()
let ( ~- ) () : Vector<'a, Z> = Vector.empty<'a>
let ( ** ) (x : 'a) (v : Vector<'a, 'n>) = Vector.cons x v