blob: 971a464a893839608a61e6474102cb3a6a76eafd (
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
26
|
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
-- This test uses the PushC rule of the System FC operational semantics
-- Writen by Tom Schrijvers
module CoTest3 where
data T a = K (a ~ Int => a -> Int)
{-# INLINE[2] f #-}
f :: T s1 ~ T s2 => T s1 -> T s2
f x = x
{-# INLINE[3] test #-}
test :: T s1 ~ T s2 => (s1 ~ Int => s1 -> Int) -> (s2 ~ Int => s2 -> Int)
test g = case f (K g) of
K r -> r
e :: s ~ Int => s -> s -> Int
e _ s = s
final :: s1 ~ s2 => s1 -> (s2 ~ Int => s2 -> Int)
final x = test (e x)
|