Пример SQLite3 haskell createFunction

Вот привязки SQLite3 Haskell с возможностью создания функции: http://hackage.haskell.org/packages/archive/sqlite/0.5.1/doc/html/Database-SQLite.html

Но я не могу использовать эту функцию, я написал такой код:

increment a = a + 1

checkout = do
       handle <- openConnection "test.db"
       ok <- createFunction handle "woot" (IsFunctionHandler increment)

       return $ execStatement handle "SELECT woot(5)";

Но он не компилируется с ошибкой «Не в области: конструктор данных `IsFunctionHandler'».


Правильный код:

module Test where

import Database.SQLite
import Int

increment :: Int64 -> Int64
increment a = a + 1

checkout :: IO (Either String [[Row Value]])
checkout = do
       handle <- openConnection "test.db"
       ok <- createFunction handle "woot" increment

       execStatement handle "SELECT woot(5), woot(7), woot(128)"

Благодаря HaskellElephant


person pechenie    schedule 04.03.2011    source источник


Ответы (1)


IsFunctionHandler — это класс, а не конструктор данных. Он имеет несколько экземпляров поэтому, если increment является экземпляром IsFunctionHandler, что в данном случае и есть, вы сможете написать:

createFunction handle "woot" increment
person HaskellElephant    schedule 04.03.2011
comment
Да, спасибо, я только что запутался со всеми этими классами типов и экземплярами, спасибо :) Я публикую правильный код в вопросе. - person pechenie; 04.03.2011