data Pair a b = { Pair a b }

defn packer = {
    let {
        data Packed a = { Packed a }
        defn pack a = { Packed a }
        defn unpack p = {
            case p of {
                Packed a -> { a }
            }
        }
    } in {
        Pair pack unpack
    }
}

defn main = { 
    case packer of {
        Pair pack unpack -> {
            unpack (pack 3)
        }
    }
}