タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
この記事では、JavaライクなインターフェースとHaskellライクな型クラスを比較します。どちらも、複数の異なる型を統一的に扱うための仕組みです。 インターフェース インターフェースはご存知の方も多いと思いますが、コード例を載せておきます。 // インターフェースの定義 interface Greetable { String greet(); } // 実装の例1 class Hello implements Greetable { String message; Hello(String m) { this.message = m; } public String greet() { return "Hello " + message + "!"; } } // 実装の例2 class Goodbye implements Greetable { public String gree
Rustのトレイト(以降Rustトレイトとつなげて呼ぶことにする)は一体何なのか、様々な他言語の概念を通して調べていたが、やっと(「やはり」でもあるのだが)結論が出たので書いていこうと思う。 また、Rustトレイトはインターフェースなのか、MixInなのか、はたまたトレイトなのかということについて書き直したかったのでそれもついでに書く。 Rustのトレイトにおける否定 前置き Rustのトレイトはインターフェースではない RustのトレイトはJavaのインターフェースではない RustのトレイトはC#のインターフェースではない RustのトレイトはMixInではない Rustのトレイトはトレイトではない Rustのトレイトは「高カインド多相のない型クラス」だった 根拠1: 型クラスと用法が同じである 根拠2: 重複する関数があった際の挙動も同じ Rustのトレイトでは高カインド多相ができな
この記事は型 Advent Calendar 2019の23日目です。 おはようございます!!!coord_eです、よろしくどうぞ。 はじめに この記事ではOCamlみたいなML系言語が登場します。関数型プログラミング言語と呼ばれる何かしらに触れたことがある人ならお気持ちで読み取れると思います。そうでない人はこちらからOCamlに入門してみると楽しいと思います。楽しいと思いますって何ですか... また、私は正直なところこの記事を書くにあたって関連する十分な量の文献を読みこむことができたわけではなく、誤りが存在することは容易に想像できます。誤字や誤謬を発見された方は@coord_eまでご連絡ください。 概要 型クラス (type class)はWadlerによって[1]で提案された言語機能だ。本記事では型クラスを導入する動機をオーバーローディングの観点から紹介した後、Wadlerの型クラスを
この記事では、Haskellの型クラスの互換性にまつわる問題と、それに対する緩和策を考える。 ネタとしては11月に行われた Haskell Day 2019 のLTで筆者が話したものである。その時使ったスライドは https://drive.google.com/file/d/1YGKjl8S-LlfuB8yrHnKSK5G5MGsP9xd3/view?usp=sharing で読める。 問題 Haskell標準の型クラス階層には時折、破壊的変更が加えられてきた。代表的なものをいくつか挙げる: Applicative-Monad Proposal: ApplicativeクラスをMonadのスーパークラスにする Semigroup-Monoid Proposal: SemigroupクラスをMonoidクラスのスーパークラスにする MonadFail Proposal: Monadクラスの
アジア最大級の国際Scalaカンファレンスである「ScalaMatsuri2020」がオンラインで開催されました。ここで中村氏が「他言語経験者が0から始めるScala ~block式とfor式と型クラス~」をテーマに登壇。最後は型クラスについて紹介します。前回の記事はこちら。 Scalaは言語機構を使って型クラスを利用 中村学氏(以下、中村):ScalaではHaskell等から輸入された型クラスが使われています。専用の構文が用意されているわけではなく、implicit parameterという言語機構を使って実現しています。 これはちょっと語弊ありますね。implicit parameterそのものが型クラスを実現するために作られた言語機構でもあるので、専用の言語機構があるという言い方も、できると言えばできますが、型クラス以外にもimplicit parameterは使えるので、そういう表
Haskell には型クラスと呼ばれる重要な機能がある.これは名前の通り,型をクラス分けするための機能で,その型に対してある操作が構成できることをその型の性質とみなし,性質に名前がつけられる機能だ.この機能は,アドホック多相,つまりは型による静的なオーバーロードを実現する仕組みとしての側面もある.型クラスに対しては,型ごとにそのインスタンス,つまり操作の実装を与えることができ,ある型がある型クラスに所属していることを型注釈で表明することができる.その表明は,コンパイラによるインスタンスの自動検索で解決され,解決できなかった場合は型エラーになる. さて,型クラスの仕組みは coherence という,かなり強い性質を要求する.今回は,この coherence がどういう役割を持つかを,Haskell を例に見ていく.また,orphan インスタンスと呼ばれる特殊なインスタンスと cohere
HaskellやScalaなどの関数型言語の特徴として型クラスというものがある。 これは関数型における強力な道具の一つであり、そして何もHaskellやScalaなどの特権機構ではない。 サポートの大小はあれど他の言語でも実現できる。 そして最近ではRustやGoが型クラスに似たような思想のセマンティクスを採用していることからもわかるように非常に便利である。 この記事では型クラスの概念を理解し、それをTypeScriptで(最低限)どの様に実現することができるか説明する。 型クラス(Typeclass)とは 型クラスの目的はJava/C++のOOPスタイルの継承機構と同様にいろんなデータ構造に対して共通の構造を定義することである。 更にその共通部分をしてある種同じ存在だとみなすことでいわゆる多相性を実現する。 また型クラスによって定義された共通部分に対してのみコードを書くことによって、再利
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く