summaryrefslogtreecommitdiff
path: root/testsuite/tests/rep-poly/T19615.hs
blob: 8d71ca925e5ab0cdd7e7e041012deae18ee81f07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{-# LANGUAGE RankNTypes     #-}
{-# LANGUAGE PolyKinds      #-}
{-# LANGUAGE DataKinds      #-}
{-# LANGUAGE TypeFamilies #-}
module T19615 where

import GHC.Exts

class Call (r :: RuntimeRep) where
  type Lev (a :: TYPE r)
  lift' :: (a :: TYPE r) -> (Lev a -> b) -> b
  mapF  :: forall r' (a :: TYPE r) (b :: TYPE r'). Call r' => (a -> b) -> Lev a -> Lev b

instance Call LiftedRep where
  type Lev a = a
  lift' a k = k a
  mapF f x = lift' (f x) id