我想声明一个类型类,它具有一些实现的函数,这些函数利用未实现的常量值(table
):
class FromRow a => StdQueries a where
table :: String
byId :: Int -> QueryM (Maybe a)
byId = fmap listToMaybe . queryM sql . Only
where sql = read $ "SELECT * FROM " ++ table ++ " WHERE id = ?"
这个想法很简单:我想byId
通过仅指定以下来实例化这个类型类来获得(和其他类似的功能)table
:
instance StdQueries SomeType where
table = "the_constant_value_for_this_type"
但是编译器一直抱怨以下消息:
The class method `table'
mentions none of the type variables of the class StdQueries a
When checking the class method: table :: String
In the class declaration for `StdQueries'
有没有解决这类问题的方法?newtype
可以借助帮助或类似的东西来欺骗吗?