Guarded Methods in OCaml (xvw.lol)

40 points by birdculture 4 days ago

2 comments:

by spankalee 9 minutes ago

Cool to see this pop up today.

I'm building a new language and just a couple of days ago the concept of guard methods came up as I was trying to tighten up equality semantics to be more like Swift.

Things like Array.contains() only work if the element type implements the Equatable interface, so it would be a guard method. Maybe something like:

    class Array<T> {
      contains(value: T): boolean where T extends Equatable { ... }
    }
Or possibly a constraint on the `this` type, TypeScript style:

    class Array<T> {
      contains(this: Array<T extends Equatable>, value: T): boolean { ... }
    }
https://github.com/elematic/zena/blob/8d77f2b36001078f4d5054...
by msdz an hour ago

Nice article, but I don’t fully understand why the author argues for such an aversion to static functions.

> Moreover, it breaks the systematic approach of sending messages to an instance (often presented as one of the key arguments in favor of object-oriented programming).

Is this just a matter of “the code will become spaghetti once too many classes/methods/implementations exist”? And, conversely, is a non-static method with a constrained, i.e. somehow different type (or also the approach of moving a method outside of the class proper) not more confusing?

Data from: Hacker News, provided by Hacker News (unofficial) API