"Var.tcTyVarDetails" exception w/ Assoc. Datatypes and Monad Transformers
When trying to build a monad stack which involves a state transformer with a constrained state, the newtype which constrains said state (below, it is the
Filter newtype) cannot seem to derive something within the list of things it's intended to derive. After some testing I found that changing the
MonadState Bool part of the
deriving clause to
MonadState t (in line with the actual state parameter) made everything work. The Type of
data Email = Email and not importing the real version, it still compiles fine in the fixed case, and does not compile in the broken case).
I have not tested on GHC 6.12 yet, I'm still trying to install it. All other system information at the bottom.
By the looks of it, this is a case of GHC not noticing I'm doing something silly, and not reporting something along the lines of the "This isn't polymorphic enough" error.
type Context = ReaderT Email type Match t = StateT t IO type ContextMatch t a = Context (Match t) a newtype FilterState t => Filter t a = Filter (ContextMatch t a) deriving (Functor, Monad, MonadReader Email, MonadState Bool, MonadIO) class FilterState t where data FState t deliver :: FState t -> IO ()
[1 of 3] Compiling Network.HackMail.Email.ParseEmail ( Network/HackMail/Email/ParseEmail.hs, interpreted ) [2 of 3] Compiling Network.HackMail.Email.Email ( Network/HackMail/Email/Email.hs, interpreted ) [3 of 3] Compiling Network.HackMail.Filter.Filter ( Network/HackMail/Filter/Filter.hs, interpreted ) *** Exception: No match in record selector Var.tcTyVarDetails
type Context = ReaderT Email type Match t = StateT t IO type ContextMatch t a = Context (Match t) a -- changed `Bool` to `t`. newtype FilterState t => Filter t a = Filter (ContextMatch t a) deriving (Functor, Monad, MonadReader Email, MonadState t, MonadIO) class FilterState t where data FState t deliver :: FState t -> IO ()
[jfredett@Erdos]$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.10.4 [jfredett@Erdos]$ uname -a Linux Erdos 2.6.31-ARCH #1 SMP PREEMPT Fri Oct 23 11:12:58 CEST 2009 i686 Intel(R) Celeron(R) CPU 3.06GHz GenuineIntel GNU/Linux
(Possibly) Related Tickets include: 3621, 3422 and 2714