Учитывая следующую программу:Почему GHC создает следующее сообщение об ошибке?
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
import Control.Monad.Reader
newtype AppM a = AppM (ReaderT Int IO a)
deriving (Functor, Applicative, Monad, MonadReader)
MonadReader
получения декларации должна быть MonadReader Int
. GHC выдает следующее сообщение об ошибке:
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’
Это сообщение об ошибке меня сбивает с толку. Тип MonadReader
- * -> (* -> *) -> GHC.Prim.Constraint
, что и указывает сообщение об ошибке, что имеет смысл. Однако в сообщении об ошибке указано, что он ожидает вида * -> GHC.Prim.Constraint
, несмотря на то, что MonadReader Int
на самом деле имеет вид (* -> *) -> GHC.Prim.Constraint
.
Учитывая, что виды *
и * -> *
не совпадают, это сообщение об ошибке не только вводит меня в заблуждение, но и фактически неверно. Это ошибка, или я пропускаю что-то в этом сообщении об ошибке?
Похож на ошибку с сообщениями об ошибках и обобщенным новым типом. Вы можете открыть билет на [Trac] (https://ghc.haskell.org/trac/ghc). –
Странно. Я бы попробовал автономный вывод, чтобы проверить, не имеет значения. – chi
Я открыл билет здесь: http://ghc.haskell.org/trac/ghc/ticket/12546 –