2011-03-04 12 views
2

這裏的SQLite3的哈斯克爾綁定與創造功能的能力:http://hackage.haskell.org/packages/archive/sqlite/0.5.1/doc/html/Database-SQLite.htmlsqlite3的哈斯克爾createFunction例如

但我不能讓使用此功能,我寫了這樣的代碼:

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

回答

2

IsFunctionHandler是一類,而不是數據的構造。它有幾個instances所以如果incrementIsFunctionHandler一個實例,至極它在這種情況下,你應該能夠寫:

createFunction handle "woot" increment 
+0

是的,謝謝,我剛剛搞砸這一切類型類和實例,感謝: )我在問題中發佈了正確的代碼。 – pechenie 2011-03-04 13:21:45