summaryrefslogtreecommitdiff
path: root/testsuite/tests/quantified-constraints/T9123.hs
blob: 130312b150d2a73907f7cc9185ba1085df7cc652 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE InstanceSigs, RoleAnnotations  #-}

module T9123 where

import Data.Coerce

type role Wrap representational nominal
newtype Wrap m a = Wrap (m a)

class Monad' m where
  join' :: forall a. m (m a) -> m a

-- Tests the superclass stuff
instance (forall p q. Coercible p q => Coercible (m p) (m q), Monad' m) => Monad' (Wrap m) where
  join' :: forall a. Wrap m (Wrap m a) -> Wrap m a
  join' = coerce @(m (m a) -> m a)
                 @(Wrap m (Wrap m a) -> Wrap m a)
                 join'