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'
|