SQLite3 haskell createFunction, пример - PullRequest
2 голосов
/ 04 марта 2011

Вот привязки 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)";

Но он не компилируется с ошибкой «Not in scope: конструктор данных` 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

1 Ответ

2 голосов
/ 04 марта 2011

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

createFunction handle "woot" increment
...