2016-08-26 11 views
8

Учитывая следующую программу:Почему 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.

Учитывая, что виды * и * -> * не совпадают, это сообщение об ошибке не только вводит меня в заблуждение, но и фактически неверно. Это ошибка, или я пропускаю что-то в этом сообщении об ошибке?

+6

Похож на ошибку с сообщениями об ошибках и обобщенным новым типом. Вы можете открыть билет на [Trac] (https://ghc.haskell.org/trac/ghc). –

+0

Странно. Я бы попробовал автономный вывод, чтобы проверить, не имеет значения. – chi

+3

Я открыл билет здесь: http://ghc.haskell.org/trac/ghc/ticket/12546 –

ответ

2

Как Tikhon Jelvis said, это была ошибка. Алексис Кинг открыл this ticket, который был закрыт как фиксированный четыре месяца назад.