@JavaType "org.simantics.scl.compiler.elaboration.expressions.Expression" data Expression = @JavaType "org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral" @FieldNames [value] EIntegerLiteral String | @JavaType "org.simantics.scl.compiler.elaboration.expressions.ERealLiteral" @FieldNames [value] ERealLiteral String changeType :: Expression -> Expression changeType (EIntegerLiteral value) = ERealLiteral value changeType (ERealLiteral value) = EIntegerLiteral value main :: Expression main = changeType (EIntegerLiteral "123") -- 123