Algebraic Data Type and Pattern Matching for Julia