TemplateHaskell, похоже, не сообщает, какую функцию нужно импортировать - PullRequest
0 голосов
/ 27 декабря 2018

Этот импорт:

 import Data.Singletons.TH
   (
     FalseSym0,
     FromEnum,
     MaxBound,
     MinBound,
     PEq,
     PShow,
     ShowsPrec,
     ShowStringSym0,
     SShow,
     ToEnum,
     TrueSym0,
     sShowsPrec,
     sShowString
   )

завершается неудачно со следующей ошибкой:

 error:
         Cannot find type of method Data.Singletons.Prelude.Enum.toEnum
        |
     23 | $(singletons [d|
        |   ^^^^^^^^^^^^^^...

 error: Q monad failure
        |
     23 | $(singletons [d|
        |   ^^^^^^^^^^^^^^...

Когда импорт изменяется на:

 import Data.Singletons.TH

все работает просто отлично.

Добавление toEnum в список импорта для Data.Singletons.TH завершится неудачно с:

 error:
         Module ‘Data.Singletons.TH’ does not export ‘toEnum’
        |
     21 |     toEnum
        |     ^^^^^^

Из того, что я могу сказать, часть кода, вызвавшая это здесь:

 $(singletons [d|
   data DoorState :: Type where
     Opened :: DoorState
     Closed :: DoorState
     Locked :: DoorState
     deriving (Bounded, Data, Enum, Eq, Show, Typeable)
   |])

 $(singletons [d|
   class Cycle a where
     next :: a -> a
     prev :: a -> a
   |])

 instance forall a. (Bounded a, Enum a, Eq a) => Cycle a where
   next x
     | x == maxBound = minBound
     | otherwise = succ x
   prev x
     | x == minBound = maxBound
     | otherwise = pred x

Какую функцию нужно добавить в список импорта, чтобы все работало правильно?Почему эта функция не отображается в сообщении об ошибке.

1 Ответ

0 голосов
/ 01 января 2019

Очевидно, что вы можете получить ответ на свой вопрос, передав полный импорт и добавив «-ddump-minimal-import» в опции компиляции.В вашем случае вы пропускаете (для lts-13.0): "sError, Sing (SFalse, STrue), PEnum (..), SEnum (..), тип (== @ # @ $), SEq ((% ==)), ErrorSym0 "

...