У меня следующая структура данных, и я пытаюсь написать для нее принтер:
data CTypeF a
= CVarF Int
| CArrF a a
| CIntF
| CBoolF
deriving (Eq, Data, Show, Functor, Foldable, Traversable)
Следующее дает мне ошибку:
my_test = do
let c0 = CIntF
(print CIntF)
Это сообщение об ошибке:
• Ambiguous type variable ‘a0’ arising from a use of ‘print’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Show Constr -- Defined in ‘Data.Data’
instance Show ConstrRep -- Defined in ‘Data.Data’
instance Show DataRep -- Defined in ‘Data.Data’
...plus 40 others
...plus 166 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of a 'do' block: (print CIntF)
In the expression:
do let c0 = CIntF
(print CIntF)
Я видел следующий вопрос Неоднозначная переменная типа "b1", возникающая в результате использования "print"
и изменил мой код, чтобы сделать (print CIntF :: CTypeF)
, но я получаю:
• Expecting one more argument to ‘CTypeF’
Expected a type, but ‘CTypeF’ has kind ‘* -> *’
Я немного растерялся, в чем проблема. Может ли кто-нибудь указать, что я здесь делаю не так?