Sorry für die Frage als möglicherweise dumme Frage, aber zurück zu Haskell, um einige Konvertierung von einem Datenbank-Paket zu einem anderen zu tun, finde ich mich ein wenig verwirrt darüber, wie man das richtig macht.Funktion mit Typ-Synonym
Im Database.SQLite3
Modul gibt es eine execWithCallback
mit Typ
execWithCallback :: Database -> Text -> ExecCallback -> IO()
Nun wird der Rückruf als
type ExecCallback = ColumnCount -> [Text]-> [Maybe Text] -> IO()
definiert ist, die eine Funktion mit dem Typ ist, ExecCallback
Meine dumme Testcode kompiliert und läuft korrekt:
{-# 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
aber dann, was ist der Sinn des Typs ??? Und, wie kann ich angeben, dass cb
ein ExecCallback
??
Es kann Typ Signaturen kürzer machen !!! Und Sie müssen nicht angeben, dass es eins ist. es ist einfach !! Aber wenn Sie möchten, können Sie 'cb :: ExecCallback' schreiben. Ich würde es jedoch nicht besonders empfehlen; es zu schreiben macht es klarer. Und Sie brauchen nicht so viele Fragezeichen! – dfeuer