summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/gadt/rw.hs
blob: 0d0018ac30dd203c1f02b3d7b3f07665d0085f34 (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
27
28
29
{-# LANGUAGE GADTs #-}

module Main where

import Data.IORef

data T a where
  Li:: Int -> T Int
  Lb:: Bool -> T Bool
  La:: a -> T a

writeInt:: T a -> IORef a -> IO ()
writeInt v ref = case v of
		   ~(Li x) -> writeIORef ref (1::Int)

readBool:: T a -> IORef a -> IO ()
readBool v ref = case v of
		   ~(Lb x) -> 
		       readIORef ref >>= (print . not)

tt::T a -> IO ()
tt v = case v of
         ~(Li x) ->  print "OK"

main = do
	tt (La undefined)
	ref <- newIORef undefined
	writeInt (La undefined) ref
	readBool (La undefined) ref