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

  • little_ferrisOP
    link
    fedilink
    English
    arrow-up
    2
    ·
    2 months ago

    Yea it’s like when we writeSome(2). It’s not a function call but a variant of the Option enum.

    • barsoap@lemm.ee
      link
      fedilink
      arrow-up
      3
      ·
      2 months ago

      Enum constructors are functions, this typechecks:

      fn foo<T>() {
          let f: fn(T) -> Option<T> = Some;
      }
      

      I was a bit apprehensive because rust has like a gazillion different function types but here it seems to work like just any other language with a HM type system.

      • little_ferrisOP
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 months ago

        Woah. That’s quite interesting. I didn’t know that.

      • anton@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        1
        ·
        2 months ago

        I was a bit apprehensive because rust has like a gazillion different function types but here it seems to work like just any other language with a HM type system.

        The fn(T)->R syntax works for functions without associated data, it discards details of the implementation and works like function pointers in C. This allows them to be copy and 'static.

        The other function types can have data with them and have more type information at compile time which allows them to be inlined.
        These functions each have their own unwritable type that implements the function traits (Fn(T)->R, FnMut(T)->R and FnOnce(T)->R) depending on their enclosed data.

        I hope I remembered everything right from this video by Jon Gjengset.