2016-08-26 30 views
8

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?

+6

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). –

+0

Dziwne. Spróbowałbym wypróbować samodzielnie, aby sprawdzić, czy to robi jakąkolwiek różnicę. – chi

+3

Otworzyłem bilet tutaj: http://ghc.haskell.org/trac/ghc/ticket/12546 –

Odpowiedz

Powiązane problemy