summaryrefslogtreecommitdiff
path: root/testsuite/tests/indexed-types/should_compile/T4338.hs
blob: 6fa2ae85ac0c14fb2e513fe171a3e4cfa798b90c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, FlexibleContexts #-}

module Main where

class (There a ~ b, BackAgain b ~ a) => Foo a b where
     type There a
     type BackAgain b
     there :: a -> b
     back :: b -> a
     tickle :: b -> b

instance Foo Char Int where
     type There Char = Int
     type BackAgain Int = Char
     there = fromEnum
     back = toEnum
     tickle = (+1)

test :: (Foo a b) => a -> a
test = back . tickle . there

main :: IO ()
main = print $ test 'F'