5 comments

  • vatsachak 3 hours ago
    Types are puzzles. A good Rustacean will make sure that the pieces fit to make the picture.

    That's why in crates where I need to make sure certain functions are called in order, I use a Ticket<T>, where one function returns a Ticket<Func1Done> with the output and the other has to consume it as an input.

    The typestate pattern is a specialization of making only valid states representable

    • LtdJorge 2 hours ago
      One of my favorite useful patterns
    • binary132 1 hour ago
      why not just create a wrapper type for the payload that is returned by func1 and func2 takes it as a parameter?
      • llleeeoooh 12 minutes ago
        Because you may want to share certain behaviors between the two wrapper types via generic impl
  • arpinum 2 hours ago
    I use Typestates and Newtypes extensively. The metric that shows Typestate and Newtypes are beneficial is: How many method calls or parameters can be called / used that compile but are not valid use cases. You want to minimise this number. I love having a type state where I can only make 1 or 2 method calls because the state enforces there are only a few parsing / validation / transition methods available. And there is only one valid way to supply the parameters, I cannot use the strings in the wrong location. I only wish we had named parameters like ObjC.
  • doyougnu 1 hour ago
    This was a talk at the FUNARCH workshop at this year’s ICFP.

    Here’s the livestream: https://www.youtube.com/live/c0pw1iVs_Q0?is=hwm2xa4cZOcqF5tW

    Well post the individual talks in the following days!

  • michaelnoguera 4 hours ago
  • sourdecor 1 hour ago
    Could someone compare this to ST in Idris?
    • nvader 24 minutes ago
      Yes, I believe it should be possible for someone to do that.