I am looking for something with a type signature like this:
grabAcidState :: AcidState as -> IO as
basically I just want to return my data from database abstractly or based on a class.
The reason for this is because I want to have a class instance of state and then I can implement my library like so:
data MyCoolData :: MyCoolData T.Text
class HasCoolData a where
getCoolDataList :: a -> MyCoolData
grabStoredList :: HasCoolData as => AcidState as -> IO [MyCoolData]
grabStoredList as = do
cs <- grabAcidState as
return $ getCoolDataList cs
and users could implement it like so:
data AppState = AppState {
someCoolData :: [MyCoolData]
}
instance HasCoolData AppState {
getCoolDataList = someCoolData
}
However trying to implement this simple behavior has been proving quite difficult. Maybe I am making this too difficult and I should just have a seperate AcidState datatype for my library.
Any help would be appreciated.