• Lilac [she/her]@lemmygrad.ml
    link
    fedilink
    arrow-up
    6
    ·
    edit-2
    3 years ago

    Typed functional languages usually do, as mentioned by others. This is form of Algebraic Data Type called a Sum Type (as oppose to a Product type, which is basically a normal struct).

    Here’s some examples of creating a binary tree in different languages (also Lemmy’s code formatter is terrible)

    Examples

    Haskell

    data Tree a = Empty | Leaf a | Node (Tree a) (Tree a)

    F#

    type Tree<'a> = Empty | Leaf of 'a | Node of (Tree<'a> * Tree<'a>)

    Scala

    sealed trait Tree[+A]

    case class Empty[A]() extends Tree[A]

    case class Leaf[A](a: A) extends Tree[A]

    case class Node[A](left: Tree[A], right: Tree[A]) extends Tree[A]

    Rust

    enum Tree<T> {

    Empty,

    Leaf(T),

    Node(Box<Tree<T>>, Box<Tree<T>>),

    }

  • OsrsNeedsF2P
    link
    fedilink
    arrow-up
    1
    ·
    3 years ago

    Can you give examples? From the description, it seems like most languages (like Java) can store data in enums?

    • acabjones@lemmygrad.ml
      link
      fedilink
      arrow-up
      4
      ·
      3 years ago

      I think they mean that enum variants can contain fields, i.e. individual variants are themselves structs or tuple structs. AFAIK the closest thing to this in a C-like lang would be a tagged union type.

      • lemtomanOP
        link
        fedilink
        arrow-up
        3
        ·
        3 years ago

        oh yes thats what i mean. Coded in rust, loved this feature, went back to python a bit and became sad that I couldnt do the same. Feels stupid that a variable can be different types depending on the situation, and having a dataclass where just one field is relevant seems too dumb