Я хочу объявить класс, который имеет некоторые реализованные функции, которые используют нереализованное постоянное значение (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
или что-нибудь в этом роде?