Biorąc pod uwagę następujący program:Dlaczego GHC wydaje następujący komunikat o błędzie?
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
import Control.Monad.Reader
newtype AppM a = AppM (ReaderT Int IO a)
deriving (Functor, Applicative, Monad, MonadReader)
MonadReader
wynikające deklaracja powinna być MonadReader Int
. GHC produkuje się następujący komunikat o błędzie:
Expecting one more argument to ‘MonadReader’
Expected kind ‘* -> ghc-prim-0.4.0.0:GHC.Prim.Constraint’,
but ‘MonadReader’ has kind ‘*
-> (* -> *) -> ghc-prim-0.4.0.0:GHC.Prim.Constraint’
In the newtype declaration for ‘AppM’
wiadomość Ten błąd jest mylące dla mnie. Typ MonadReader
to * -> (* -> *) -> GHC.Prim.Constraint
, jak podaje komunikat o błędzie, co ma sens. Jednak komunikat o błędzie stwierdza, że to przewiduje, że rodzaj , mimo że MonadReader Int
jest rzeczywiście rodzaju (* -> *) -> GHC.Prim.Constraint
.
Biorąc pod uwagę, że rodzaje *
i * -> *
nie pasują, ten komunikat o błędzie jest nie tylko mylący dla mnie, ale w rzeczywistości niepoprawny. Czy to błąd, czy też coś przeoczyłem w tym komunikacie o błędzie?
Wygląda jak błąd z komunikatem o błędach i generalizowanym nowym typem pochodzącym od mnie. Możesz otworzyć bilet na [Trac] (https://ghc.haskell.org/trac/ghc). –
Dziwne. Spróbowałbym wypróbować samodzielnie, aby sprawdzić, czy to robi jakąkolwiek różnicę. – chi
Otworzyłem bilet tutaj: http://ghc.haskell.org/trac/ghc/ticket/12546 –