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 |
No, everything is a ParseTree
, everything but AndNode
and OrNode
are ValueNode
. So it's subsets of types
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Not sure I can read Scala well, does this F# do the same job, roughly? Sounds like Scala just lets you elide some of the tags (like StringNode).