Created
November 6, 2013 16:09
-
-
Save tkellogg/7338884 to your computer and use it in GitHub Desktop.
Is this a bad pattern? I've begun using it a lot and I haven't seen any negative effects, but I've never heard anyone advocate for it either. Wondering if my intuition is mislead. As far as I know, these patterns don't exist in F#, ML or Haskell, so I'm wondering if they're a brilliant addition of Scala or an antipattern.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed trait ParseTree | |
sealed trait ValueNode extends ParseTree | |
sealed trait PrimitiveValueNode extends ValueNode | |
case class OrNode(left: ParseTree, right: ParseTree) extends ParseTree | |
case class AndNode(left: ParseTree, right: ParseTree) extends ParseTree | |
case class BoolNode(value: Boolean) extends PrimitiveValueNode | |
case class IntNode(value: Int) extends PrimitiveValueNode | |
case class StringNode(value: String) extends PrimitiveValueNode | |
// Use refined trait ValueNode to better describe what value can *actually* hold | |
case class PropertyNode(key: StringNode, value: ValueNode) extends ParseTree | |
case class ObjectNode(properties: List[PropertyNode]) extends ValueNode |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No, everything is a
ParseTree
, everything butAndNode
andOrNode
areValueNode
. So it's subsets of types