If we were to create a Rust version of this page for Haskell, what cool programming techniques would you add to it?

  • Ephera
    link
    fedilink
    arrow-up
    20
    ·
    1 month ago

    A cool thing you can do, is to store values of all kinds of types in a big HashMap, basically by storing their TypeId and casting them to Box<dyn Any> (see std::any).
    Then you can later retrieve those values by specifying the type (and optionally another ID for storing multiple values of the same type).

    So, you can create an API which is used like this:

    let value = MyType::new();
    storage.insert(value);
    let retrieved = storage.get::<MyType>();
    assert_eq!(retrieved, value);
    

    There’s various ECS storage libraries which also implement such an API. Depending on what you’re doing, you might prefer to use those rather than implementing it yourself, but it’s not too difficult to implement yourself.