{-# LANGUAGE GADTs, MultiParamTypeClasses #-}
import Data.Word
data Expr a where
Value :: a -> Expr a
Cast :: (Castable a b) => Expr a -> Expr a
class Castable a b where
cast :: a -> b
instance Castable Word64 Word32 where
instance (Show a
) => Show (Expr a
) where show (Cast e
) = "Cast " ++ show e
-- ERROR
ey0jIExBTkdVQUdFIEdBRFRzLCBNdWx0aVBhcmFtVHlwZUNsYXNzZXMgIy19CmltcG9ydCBEYXRhLldvcmQKCmRhdGEgRXhwciBhIHdoZXJlCiAgVmFsdWUgOjogYSAtPiBFeHByIGEKICBDYXN0IDo6IChDYXN0YWJsZSBhIGIpID0+IEV4cHIgYSAtPiBFeHByIGEKCmNsYXNzIENhc3RhYmxlIGEgYiB3aGVyZQogIGNhc3QgOjogYSAtPiBiCgppbnN0YW5jZSBDYXN0YWJsZSBXb3JkNjQgV29yZDMyIHdoZXJlCiAgY2FzdCA9IGZyb21JbnRlZ3JhbAoKaW5zdGFuY2UgKFNob3cgYSkgPT4gU2hvdyAoRXhwciBhKSB3aGVyZQogIHNob3cgKENhc3QgZSkgPSAiQ2FzdCAiICsrIHNob3cgZSAtLSBFUlJPUgoKbWFpbiA9IHByaW50ICIi