anchor.diff:                  | (_, _) -> (Violation ([!!"InvalidArgumentType"; !!"V2"; !!(String.capitalize fnName)], "Application of " + fnName + " requires a single for the both arguments.", fnOptOrigin), env)
               | _ -> (Violation ([!!"InvalidArgumentCount"; !!"V2"; !!(String.capitalize fnName)], "Incorrect number of arguments for application of '" + fnName + "'; 2 arguments required.", fnOptOrigin), env)
   
  +        and Intrinsics =
  +            dictPlus
  +                [("!", evalBoolUnary not)
  +                 ("&", evalBoolBinary (&&))
  +                 ("|", evalBoolBinary (||))
  +                 ("=", evalBinary EqFns)
  +                 ("<>", evalBinary NotEqFns)
  +                 ("<", evalBinary LtFns)
  +                 (">", evalBinary GtFns)
  +                 ("<=", evalBinary LtEqFns)
  +                 (">=", evalBinary GtEqFns)
  +                 ("+", evalBinary AddFns)
  +                 ("-", evalBinary SubFns)
  +                 ("*", evalBinary MulFns)
  +                 ("/", evalBinary DivFns)
  +                 ("%", evalBinary ModFns)
  +                 ("pow", evalBinary PowFns)
  +                 ("root", evalBinary RootFns)
  +                 ("sqr", evalUnary SqrFns)
  +                 ("sqrt", evalUnary SqrtFns)
  +                 ("floor", evalUnary FloorFns)
  +                 ("ceiling", evalUnary CeilingFns)
  +                 ("truncate", evalUnary TruncateFns)
  +                 ("round", evalUnary RoundFns)
  +                 ("exp", evalUnary ExpFns)
  +                 ("log", evalUnary LogFns)
  +                 ("sin", evalUnary SinFns)
  +                 ("cos", evalUnary CosFns)
  +                 ("tan", evalUnary TanFns)
  +                 ("asin", evalUnary AsinFns)
  +                 ("acos", evalUnary AcosFns)
  +                 ("atan", evalUnary AtanFns)
  +                 ("length", evalUnary LengthFns)
  +                 ("normal", evalUnary NormalFns)
  +                 ("cross", evalBinary CrossFns)
  +                 ("dot", evalBinary DotFns)
  +                 ("bool", evalUnary BoolFns)
  +                 ("int", evalUnary IntFns)
  +                 ("int64", evalUnary Int64Fns)
  +                 ("single", evalUnary SingleFns)
  +                 ("double", evalUnary DoubleFns)
  +                 ("string", evalUnary StringFns)
  +                 ("v2", evalV2)
  +                 //("xOf", evalNOf 0)
  +                 //("yOf", evalNOf 1)
  +                 //("xAs", evalNAs 0)
  +                 //("yAs", evalNas 1)
  +                 ("some", evalSome)
  +                 ("isSome", evalIsSome)
  +                 ("head", evalHead)
  +                 ("tail", evalTail)
  +                 ("cons", evalCons)
  +                 ("isEmpty", evalIsEmpty)
  +                 ("fst", evalNth5 0)
  +                 ("snd", evalNth5 1)
  +                 ("thd", evalNth5 2)
  +                 ("fth", evalNth5 3)
  +                 ("fif", evalNth5 4)
  +                 ("nth", evalNth)
  +                 ("product", evalProduct)]
  +
  +        and evalIntrinsic originOpt name args env =
  +            match Intrinsics.TryGetValue name with
  +            | (true, intrinsic) -> intrinsic originOpt name args env
  +            | (false, _) -> (Violation ([!!"InvalidFunctionTargetBinding"], "Cannot apply a non-existent binding.", originOpt), env)
  +
           and isIntrinsic name =
  -            match name with
  -            | "!" -> true
  -            | "&" -> true
  -            | "|" -> true
  -            | "=" -> true
  -            | "<>" -> true
  -            | "<" -> true
  -            | ">" -> true
  -            | "<=" -> true
  -            | ">=" -> true
  -            | "+" -> true
  -            | "-" -> true
  -            | "*" -> true
  -            | "/" -> true
  -            | "%" -> true
  -            | "pow" -> true
  -            | "root" -> true
  -            | "sqr" -> true
  -            | "sqrt" -> true
  -            | "floor" -> true
  -            | "ceiling"  -> true
  -            | "truncate" -> true
  -            | "round" -> true
  -            | "exp" -> true
  -            | "log" -> true
  -            | "sin" -> true
  -            | "cos" -> true
  -            | "tan" -> true
  -            | "asin" -> true
  -            | "acos" -> true
  -            | "atan" -> true
  -            | "length" -> true
  -            | "normal" -> true
  -            | "cross" -> true
  -            | "dot" -> true
  -            | "bool" -> true
  -            | "int" -> true
  -            | "int64" -> true
  -            | "single" -> true
  -            | "double" -> true
  -            | "string" -> true
  -            | "v2" -> true
  -            //| "xOf" -> true
  -            //| "yOf" -> true
  -            //| "xAs" -> true
  -            //| "yAs" -> true
  -            | "some" -> true
  -            | "isSome" -> true
  -            | "head" -> true
  -            | "tail" -> true
  -            | "cons" -> true
  -            | "isEmpty" -> true
  -            | "fst" -> true
  -            | "snd" -> true
  -            | "thd" -> true
  -            | "fth" -> true
  -            | "fif" -> true
  -            | "nth" -> true
  -            | "product" -> true
  -            | _ -> false
  -
  -        and evalIntrinsic originOpt name args env =
  -            match name with
  -            | "!" -> evalBoolUnary originOpt name not args env
  -            | "&" -> evalBoolBinary originOpt name (&&) args env
  -            | "|" -> evalBoolBinary originOpt name (||) args env
  -            | "=" -> evalBinary originOpt name EqFns args env
  -            | "<>" -> evalBinary originOpt name NotEqFns args env
  -            | "<" -> evalBinary originOpt name LtFns args env
  -            | ">" -> evalBinary originOpt name GtFns args env
  -            | "<=" -> evalBinary originOpt name LtEqFns args env
  -            | ">=" -> evalBinary originOpt name GtEqFns args env
  -            | "+" -> evalBinary originOpt name AddFns args env
  -            | "-" -> evalBinary originOpt name SubFns args env
  -            | "*" -> evalBinary originOpt name MulFns args env
  -            | "/" -> evalBinary originOpt name DivFns args env
  -            | "%" -> evalBinary originOpt name ModFns args env
  -            | "pow" -> evalBinary originOpt name PowFns args env
  -            | "root" -> evalBinary originOpt name RootFns args env
  -            | "sqr" -> evalUnary originOpt name SqrFns args env
  -            | "sqrt" -> evalUnary originOpt name SqrtFns args env
  -            | "floor" -> evalUnary originOpt name FloorFns args env
  -            | "ceiling" -> evalUnary originOpt name CeilingFns args env
  -            | "truncate" -> evalUnary originOpt name TruncateFns args env
  -            | "round" -> evalUnary originOpt name RoundFns args env
  -            | "exp" -> evalUnary originOpt name ExpFns args env
  -            | "log" -> evalUnary originOpt name LogFns args env
  -            | "sin" -> evalUnary originOpt name SinFns args env
  -            | "cos" -> evalUnary originOpt name CosFns args env
  -            | "tan" -> evalUnary originOpt name TanFns args env
  -            | "asin" -> evalUnary originOpt name AsinFns args env
  -            | "acos" -> evalUnary originOpt name AcosFns args env
  -            | "atan" -> evalUnary originOpt name AtanFns args env
  -            | "length" -> evalUnary originOpt name LengthFns args env
  -            | "normal" -> evalUnary originOpt name NormalFns args env
  -            | "cross" -> evalBinary originOpt name CrossFns args env
  -            | "dot" -> evalBinary originOpt name DotFns args env
  -            | "bool" -> evalUnary originOpt name BoolFns args env
  -            | "int" -> evalUnary originOpt name IntFns args env
  -            | "int64" -> evalUnary originOpt name Int64Fns args env
  -            | "single" -> evalUnary originOpt name SingleFns args env
  -            | "double" -> evalUnary originOpt name DoubleFns args env
  -            | "string" -> evalUnary originOpt name StringFns args env
  -            | "v2" -> evalV2 originOpt name args env
  -            //| "xOf" -> evalNOf
  -            //| "yOf" -> evalNOf
  -            //| "xAs" -> evalNAs
  -            //| "yAs" -> evalNas
  -            | "some" -> evalSome originOpt name args env
  -            | "isSome" -> evalIsSome originOpt name args env
  -            | "head" -> evalHead originOpt name args env
  -            | "tail" -> evalTail originOpt name args env
  -            | "cons" -> evalCons originOpt name args env
  -            | "isEmpty" -> evalIsEmpty originOpt name args env
  -            | "fst" -> evalNth5 originOpt name 0 args env
  -            | "snd" -> evalNth5 originOpt name 1 args env
  -            | "thd" -> evalNth5 originOpt name 2 args env
  -            | "fth" -> evalNth5 originOpt name 3 args env
  -            | "fif" -> evalNth5 originOpt name 4 args env
  -            | "nth" -> evalNth originOpt name args env
  -            | "product" -> evalProduct originOpt name args env
  -            | _ -> (Violation ([!!"InvalidFunctionTargetBinding"], "Cannot apply a non-existent binding.", originOpt), env)
  +            Intrinsics.ContainsKey name
   
           and evalProduct originOpt name args env =
               match args with
  
positive.code:             | (Phrase (phraseLeft, originLeftOpt), Phrase (phraseRight, originRightOpt)) -> ((fns.Phrase phraseLeft phraseRight (combine originLeftOpt originRightOpt)), env)
              | _ -> (Violation ([!!"InvalidArgumentType"; !!"Binary"; !!(String.capitalize fnName)], "Cannot apply a binary function on unlike or incompatible values.", combine (Expr.getOriginOpt evaledLeft) (Expr.getOriginOpt evaledRight)), env)
  
          let evalBinary fnOptOrigin fnName fns evaledArgs env =
              match evaledArgs with
              | [evaledLeft; evaledRight] -> evalBinaryInner fnName fns evaledLeft evaledRight env                
              | _ -> (Violation ([!!"InvalidArgumentCount"; !!"Binary"; !!(String.capitalize fnName)], "Incorrect number of arguments for application of '" + fnName + "'; 2 arguments required.", fnOptOrigin), env)
  
          let evalSome fnOptOrigin fnName args env =
  
negative.code:             match simulantAndEnvEir with
              | Right (simulant, env) ->
                  let world = Env.getWorld env
                  // NOTE: this sucks, having to get the property before setting it just to find out its type...
                  match World.tryGetSimulantProperty propertyName simulant world with
                  | Some (_, propertyType) ->
                      match Exporters.TryGetValue propertyType.Name with
  