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