naiveSub name =
  let onSingle (Num x) = Num $ -x
      onSingle _       = numError

      impl (x:xs) = reduceFn subs x xs
        where subs (Num a) (Num b) = Num $ a - b
              subs _       _       = numError

  in  functionFactory name onSingle impl
naiveSub name =
  let onSingle (Num x) = Num $ -x
      onSingle _       = numError

      impl (x:xs) = reduceFn subs x xs
        where subs (Num a) (Num b) = Num $ a - b
              subs _       _       = numError

  in  functionFactory name onSingle impl
naiveSub name =
  let onSingle (Num x) = Num $ -x
      onSingle _       = numError

      impl (x:xs) = reduceFn subs x xs
        where subs (Num a) (Num b) = Num $ a - b
              subs _       _       = numError

  in  functionFactory name onSingle impl