Last active
July 3, 2018 18:50
-
-
Save pbrisbin/47ad427ed4c421c21a29fff3a154e448 to your computer and use it in GitHub Desktop.
Persistent problems in LTS-11.15+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env stack | |
-- stack script --resolver lts-10.8 | |
-- vim: ft=haskell | |
{-# LANGUAGE ExistentialQuantification #-} | |
{-# LANGUAGE GeneralizedNewtypeDeriving #-} | |
{-# LANGUAGE MultiParamTypeClasses #-} | |
{-# LANGUAGE NoImplicitPrelude #-} | |
{-# LANGUAGE QuasiQuotes #-} | |
{-# LANGUAGE TemplateHaskell #-} | |
{-# LANGUAGE TypeFamilies #-} | |
module Main where | |
import ClassyPrelude | |
import Database.Persist | |
import Database.Persist.TH | |
import Database.Persist.Sql | |
share [mkPersist sqlSettings, mkMigrate "migration"] [persistLowerCase| | |
User | |
name Text | |
|] | |
getUsers :: MonadIO m => SqlReadT m [Entity User] | |
getUsers = selectList [] [] | |
main :: IO () | |
main = undefined |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env stack | |
-- stack script --resolver lts-11.15 | |
-- vim: ft=haskell | |
{-# LANGUAGE ConstraintKinds #-} | |
{-# LANGUAGE ExistentialQuantification #-} | |
{-# LANGUAGE FlexibleContexts #-} | |
{-# LANGUAGE GeneralizedNewtypeDeriving #-} | |
{-# LANGUAGE MultiParamTypeClasses #-} | |
{-# LANGUAGE NoImplicitPrelude #-} | |
{-# LANGUAGE QuasiQuotes #-} | |
{-# LANGUAGE RankNTypes #-} | |
{-# LANGUAGE TemplateHaskell #-} | |
{-# LANGUAGE TypeFamilies #-} | |
module Main where | |
import ClassyPrelude | |
import Database.Persist | |
import Database.Persist.TH | |
import Database.Persist.Sql | |
share [mkPersist sqlSettings, mkMigrate "migration"] [persistLowerCase| | |
User | |
name Text | |
|] | |
-- • Couldn't match type ‘BaseBackend backend’ with ‘SqlBackend’ | |
-- arising from a use of ‘selectList’ | |
-- • In the expression: selectList [] [] | |
-- In an equation for ‘getUsers’: getUsers = selectList [] [] | |
-- | |
-- | | |
-- 27 | getUsers = selectList [] [] | |
-- | ^^^^^^^^^^^^^^^^ | |
-- | |
-- getUsers :: MonadIO m => SqlReadT m [Entity User] | |
-- getUsers = selectList [] [] | |
-- The lts-11.15 definitions: | |
-- | |
-- type SqlBackendCanRead backend | |
-- = ( BackendCompatible SqlBackend backend <-- TAKE NOTE | |
-- , PersistQueryRead backend | |
-- , PersistStoreRead backend | |
-- , PersistUniqueRead backend | |
-- ) | |
-- type SqlReadT m a | |
-- = forall backend. SqlBackendCanRead' backend | |
-- => ReaderT backend m a | |
-- However, if I do this: | |
-- | |
type SqlBackendCanRead' backend | |
= ( BaseBackend backend ~ SqlBackend -- <-- Only difference | |
, PersistQueryRead backend | |
, PersistStoreRead backend | |
, PersistUniqueRead backend | |
) | |
type SqlReadT' m a | |
= forall backend. SqlBackendCanRead' backend | |
=> ReaderT backend m a | |
-- And now this works! | |
getUsers :: MonadIO m => SqlReadT' m [Entity User] | |
getUsers = selectList [] [] | |
main :: IO () | |
main = undefined |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment