Concurrent Clean : 型クラス (2)

[id:lethevert:20070415:p4]について
型引数で関連する型を渡しておけばよかったらしい。

class SQLConnection conn stmt stmtProp where
    //sqlOpen :: !String ![connProp] !*World -> (!PassFailSQL *(conn *stmt stmtProp), !*World)
    sqlClose :: !*(conn *stmt stmtProp) !*World -> (!MaybeFailSQL, !*World)

    sqlCommit :: !*(conn *stmt stmtProp) -> (!MaybeFailSQL, !*(conn *stmt stmtProp))
    sqlRollback :: !*(conn *stmt stmtProp) -> (!MaybeFailSQL, !*(conn *stmt stmtProp))
    sqlSetAutoCommit :: !Bool !*(conn *stmt stmtProp) -> (!MaybeFailSQL, !*(conn *stmt stmtProp))

    sqlOpenStatement :: !String ![stmtProp] !*(conn *stmt stmtProp) -> (!PassFailSQL *stmt, !*(conn *stmt stmtProp))
    sqlCloseStatement :: !*stmt !*(conn *stmt stmtProp) -> (!MaybeFailSQL, !*(conn *stmt stmtProp))

class SQLStatement stmt where
    sqlBind :: ![SQLData] !*stmt -> (!MaybeFailSQL, !*stmt)
    sqlBindDouble :: !Int !Real !*stmt -> (!MaybeFailSQL, !*stmt)
    sqlBindInt    :: !Int !Int  !*stmt -> (!MaybeFailSQL, !*stmt)
    sqlBindText   :: !Int !String !*stmt -> (!MaybeFailSQL, !*stmt)
    sqlBindNull   :: !Int !*stmt -> (!MaybeFailSQL, !*stmt)

    sqlUpdate :: !*stmt -> (!PassFailSQL Int, !*stmt)

    sqlQuery :: !*stmt -> (!MaybeFailSQL, !*stmt)
    sqlFetch   :: !*stmt -> (!PassFailSQL Bool, !*stmt)
    sqlColumnCount :: !*stmt -> (!Int, !*stmt)
    sqlColumn :: !Int !*stmt -> (!String, !*stmt)
    sqlColumns :: !*stmt -> (!{!String}, !*stmt)
    sqlResult :: !Int !*stmt -> (!PassFailSQL SQLData, !*stmt)
    sqlResults :: !*stmt -> (!PassFailSQL {!SQLData}, !*stmt)