-
Notifications
You must be signed in to change notification settings - Fork 48
Open
Description
Hi, not sure if this is the right place to ask, but I have an issue regarding Show and Eq instances for NP and NS types of functors that don't use their type parameter. The functors in my specific use-case are {Field,Constructor}Info, but the simplest example I can think of is Proxy:
newtype Proxies xs = Proxies (NP Proxy xs)
deriving (Show)This gives the following type error, which of course makes sense based on the superclass for Show (NS f xs) using All rather than QuantifiedConstraints:
src/Diff.hs:36:13-16: error: [GHC-05617]
• Could not solve: (AllF (Compose Show Proxy) xs, AllF Top xs)
arising from a superclass required to satisfy ‘All (Compose Show Proxy) xs’,
arising from the first field of ‘Proxies’ (type ‘NP Proxy xs’)
• When deriving the instance for (Show (Proxies xs))
|
36 | deriving (Show)
| ^^^^
src/Diff.hs:36:13-16: error: [GHC-39999]
• No instance for ‘All (Compose Show Proxy) xs’
arising from the first field of ‘Proxies’ (type ‘NP Proxy xs’)
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
• When deriving the instance for (Show (Proxies xs))
|
36 | deriving (Show)Is there any way I can convince GHC that Proxies has a valid Show instance regardless of what xs is, while still getting a derived instance for free? Something like
deriving instance (forall x. Show (Proxy x)) => Show (Proxies xs)Metadata
Metadata
Assignees
Labels
No labels