Ich versuche, eine Typeable
Instanz für Tupped Constraints abzuleiten. Siehe den folgenden Code:Typierbare Instanz für Constraint tupling
{-# LANGUAGE ConstraintKinds, GADTs #-}
{-# LANGUAGE DataKinds, PolyKinds, AutoDeriveTypeable #-}
{-# LANGUAGE StandaloneDeriving, DeriveDataTypeable #-}
import Data.Proxy
import Data.Typeable
data Foo (p :: (*, *))
data Dict ctx where
Dict :: ctx => Dict ctx
deriving (Typeable)
deriving instance Typeable '(,)
deriving instance Typeable Typeable
deriving instance Typeable Show
works :: IO()
works = print (typeRep (Proxy :: Proxy (Foo '(Bool, Char))))
alsoWorks :: IO()
alsoWorks = print (typeRep (Dict :: Dict (Show Bool)))
fails :: IO()
fails = print (typeRep (Dict :: Dict (Show Bool, Typeable Bool)))
main :: IO()
main = works >> alsoWorks >> fails
Wenn Sie diese kompilieren mit -fprint-explicit-kinds
, wird der folgende Fehler gegeben:
No instance for (Typeable
(Constraint -> Constraint -> Constraint) (,))
Gibt es eine Möglichkeit, eine solche Instanz ableiten? Alles, was ich versuche, weigert sich, aus dem Konstruktor ★ -> ★ -> ★
zu disambiguieren.
Die Fehlermeldung 'No instance for (Typierbar (Constraint -> Constraint -> Constraint) (,))' scheint zu implizieren, dass ein Typkonstruktor * intern * irgendwie existiert. Wenn es nur einen Namen hätte, könnten wir ... –