愚かな疑問を抱いて申し訳ありませんが、あるデータベースパッケージから別のデータベースパッケージへの変換を行うためにHaskellに戻ってきましたが、これを正しく行う方法について少し困惑しています。 Database.SQLite3
モジュールにおいてタイプ同義語の機能
は、
execWithCallback :: Database -> Text -> ExecCallback -> IO()
次に、コールバックは、タイプExecCallback
マイ愚かなテストコードコンパイルを持つ関数である
type ExecCallback = ColumnCount -> [Text]-> [Maybe Text] -> IO()
として定義されているタイプのexecWithCallback
あります正しく実行されます。
{-# LANGUAGE OverloadedStrings #-}
import Database.SQLite3
import Data.Text
cb :: ColumnCount -> [Text] -> [Maybe Text] -> IO()
cb n cnl ct = do print $ cnl !! 1
return()
main = do
dh <- open "fileinfo.sqlite"
execWithCallback dh "select * from files;" cb
close dh
しかし、タイプのポイントは何ですか?そして、cb
がExecCallback
であると指定するにはどうすればいいですか?
型署名を短くすることができます!そして、それが1であることを指定する必要はありません。それだけです!しかし、好きなら 'cb :: ExecCallback'と書くことができます。私は特にそれを推奨しませんでした。それを書くことはそれをより明瞭にする。そしてあなたはあまりにも多くの疑問符を必要としません! – dfeuer