少なくとも一部のMLファミリー言語では、パターンマッチングを実行できるレコードを定義できます(例: http: //learnyouahaskell.com/making-our-own-types-and-typeclasses)。基本的な考え方は、名前付きフィールドを持つレコードタイプ。コンストラクターはそれらのフィールドをパラメーターとして使用して自動的に作成されるため、そのタイプのレコードを作成できます。エクストラクターは、これらのフィールドをパラメーターとして使用して自動的に作成されるため、そのタイプのレコードでパターンマッチングを行うことができます。
Scalaはさらに一歩進んで、レコードに格納されているフィールド、コンストラクターパラメーター、およびエクストラクターパラメーターを互いに分離できるようにします(例:http ://daily-scala.blogspot.com/2009/11/overloaded-unapply.html ) 。この点で、オブジェクト指向プログラミングと関数型プログラミングの両方をサポートするという目標を達成しています。(もちろん、オブジェクト指向言語では、通常、格納されたフィールドとコンストラクターパラメーターを分離できますが、通常はエクストラクターはありません。)
パターンマッチングがあり、そのようなデカップリングを可能にする他の言語はありますか?
そのようなデカップリングの長所と短所について何か書かれていますか?