blob: d9933dd239979072896b6d44a031af4db70c7d5c (
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
30
31
32
33
|
{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
-- | This shows how to use typeable to perform unsafe
-- casts. Basically its an example of what Safe Haskell
-- should disallow. SafeLang14 will do that.
module Main where
import SafeLang15_A
import Data.Typeable
data H = H String deriving (Typeable, Show)
data G = G Int deriving (Show)
deriving instance Typeable G
deriving instance Typeable P
main = do
let h = H "Hello World"
g = G 1
-- Just h' = (cast h) :: Maybe G
Just p' = (cast p) :: Maybe G
Just px = (cast $ incrG p') :: Maybe P
putStrLn $ show h
putStrLn $ show g
-- putStrLn $ show h'
putStrLn $ showP p
putStrLn $ show p'
putStrLn $ showP px
incrG :: G -> G
incrG (G n) = G $ n + 1
|