fsharp: step7: Added more active patterns. Moved Node funcs to separate module.
[jackhill/mal.git] / fsharp / types.fs
index b6997c2..bd59fd8 100644 (file)
@@ -117,53 +117,6 @@ module Types
                 | :? Node as y -> Node.compare x y
                 | _ -> invalidArg "yobj" "Cannot compare values of different types."
 
-        static member ofArray arr = System.ArraySegment(arr) |> Vector
-        static member toArray = function
-            | List(lst) -> Array.ofList lst
-            | Vector(seg) -> Array.sub seg.Array seg.Offset seg.Count
-            | node -> [| node |]
-        static member length = function
-            | List(lst) -> List.length lst
-            | Vector(seg) -> seg.Count
-            | Map(m) -> m.Count
-            | _ -> 1
 
     and Env = System.Collections.Generic.Dictionary<string, Node>
     and EnvChain = Env list
-
-    let TRUE = Bool(true)
-    let SomeTRUE = Some(TRUE)
-    let FALSE = Bool(false)
-    let SomeFALSE = Some(FALSE)
-    let NIL = Nil
-    let SomeNIL = Some(NIL)
-    let ZERO = Number(0L)
-
-    (* Active Patterns to help with pattern matching nodes *)
-    let (|Elements|_|) num node =
-        let rec accumList acc idx lst =
-            let len = Array.length acc
-            match lst with
-            | [] when idx = len -> Some(Elements acc)
-            | h::t when idx < len ->
-                acc.[idx] <- h
-                accumList acc (idx + 1) t
-            | _ -> None
-        match node with
-        | List(lst) -> accumList (Array.zeroCreate num) 0 lst
-        | Vector(seg) when seg.Count = num -> Some(Node.toArray node)
-        | _ -> None
-
-    let (|Head|_|) = function
-        | List(h::t) -> Some(Head(h, List(t)))
-        | Vector(seg) when seg.Count > 0 ->
-            let h = seg.Array.[seg.Offset]
-            let t = System.ArraySegment(seg.Array, seg.Offset + 1, seg.Count - 1)
-                    |> Vector
-            Some(Head(h, t))
-        | _ -> None
-
-    let (|Empty|_|) = function
-        | List([]) -> Some(Empty)
-        | Vector(seg) when seg.Count = 0 -> Some(Empty)
-        | _ -> None