Re:When FP? And When OOP? (2013)
by chriswarbo on Monday January 28, 2019 @06:49AM
(#19016733)
I write Scheme code as if it had ADTs, e.g.
(match payment
[('invoice address ) (foo address )]
[('card card-details) (bar card-details)])
As you say, there's no exhaustiveness check; plus the language won't guarantee that the product types are adhered to. For example, someone might give us `('invoice card-details)` and the language wouldn't complain.Racket's contract system can help with this; although it's very slow.
Pattern matching is the concept that they all have in common, that I miss when it isn't available. You don't have the 'exhaustiveness' check in Elixir because it's not possible in a dynamic language (dialyzer aside), but it's still a very powerful tool.