Это - или на самом деле аналогичное стремление к типу натуральных чисел (включая 0) - на самом деле является частой жалобой на иерархию числовых классов Хаскелла, которая делает невозможным действительно чистое решение этой проблемы.
Почему? Посмотрите на определение Num
:
class (Eq a, Show a) => Num a where
(+) :: a -> a -> a
(*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
Если вы не вернетесь к использованию error
(что является плохой практикой), вы не сможете предоставить определения для (-)
, negate
и fromInteger
.
Да, если вы передаете только данные, предоставленные пользователем, в функции sqlite3_bind_ *, тогда вы защищены от атак SQL-инъекций (эти атаки предполагают, что вы динамически создаете строку запроса и не цитируете / правильно экранировать введенные пользователем данные).