な言語を実装したMonadsする静的に入力?
-
23-08-2019 - |
質問
私は学習プログラミングです。に な恐怖のMonads, 、ブライアン-ベックマンしました輝かしいなどを紹介Monad.そのMonadが構成機能など住所複雑になります。
A Monadが含まれ
unit
機能させるシリコーンコーティング処理を行への増幅タイプM(T);と結合する機能を踏まえると、機能からT M(U)、変換タイプM(T)は別タイプM(U).(UでTは必ずしも).
私の理解、言語の実施monadはテンプレートをお使いくださいチェックを静的.その他、誤差は見られない中での編纂、"複雑さ"は制御されていない。私の理解で正しいのですか。
解決
多くの実装monadsダの文言語:
- しかMonad Ruby
- OO Monadsル (サイトは、その第 のインターネットアーカイブのWayback Machine)
- Monads Ruby第1部:ティ, Monads Rubyで一1.5:ティ, Monads Ruby第2部もしかない)
- Monads Ruby
- Monadsの格安いしかMonad JavaScript, よりMonadsの格安:Inlined fromMaybe
- Monads Ruby(スホール書式]!), リストMonad RubyやPython
- ウイmonadいう表記のためのRuby
一般的には、教会-コンピュータの論文が出てくるというべき 一つ 語で行います 毎その他 言語です。
としてできるのではないでしょうか教えてからの選定例上記、私(主に)Rubyプログラマを交換してください。ですから、冗談なの例上記、再効率良く抽出できるような言語にしたん も て、通常考えられていない非常に強力な言語のようにプログラミング言語にしたいと思いませんでしたが見つMonad barcode.net(日本語版)がバージョンが存在してお---の人Monad PHP:
<?php
class Identity {
protected $val;
public function __construct($val) { $this->val = $val; }
public static function m_return($a) { return new Identity($a); }
public static function m_bind($id_a, $f) { return $f($id_a->val); }
}
var_dump(Identity::m_bind(
Identity::m_return(1), function ($x) {
return Identity::m_return($x+1);
}
));
?>
無静種類、ジェネリック医薬品、閉鎖が必要です。
さあ、実際い静的にチェックmonadsば静的な型のシステム。ものであり、tautology:したい場合に静的にチェックの種類、必要な静的な型チェッカー)Duh.
についてのご質問
私の理解、言語の実施monadはテンプレートをお使いくださいチェックを静的.その他、誤差は見られない中での編纂、"複雑さ"は制御されていない。私の理解で正しいのですか。
ですが、このなmonads.これは単ない静的な型チェック全般にもどる配列リストでも平ボの整数です。
もあり赤ニシンはこちら見れば、例えばmonad実装クライアントまで、フルのC#、Java、C、かなり複雑なれていないため、PHPの例です。特にありま トン の種類ものであったため、 見 印象的です。その醜い事実です:C#、Java、Cタイプシステムな実力を十分表現の種類 Monad
.特に、 Monad
はランク-2多様なタイプが、C#、Javaをサポートランク1の多型(呼ばれている"ジェネリック医薬品"で同じことをやCに対応しておりませんでます。
なので、monads実 ない 静的な型チェックがクライアントまで、フルのC#、Java、C(例えば、そのLINQ monad理解として定義パターンとしてではなくタイプ:できません 表現 タイプC#.) すべての静的タイプシステムは、の実装により複雑なんです。必要であり洗練されたタイプシステムなどウの、実際の型安全のためのmonads.
注意:私が書いた記 のみ に適用される汎用 monad
型自体として@Porgesポイントです。きずの種類の 特定の monadのように、 List
または Maybe
, ができませんの種類 Monad
そのものです。ということはできませんタイプ-チェックができる"List
する予定であるこ Monad
"とはできませんタイプ-チェック汎用操作することができるすべてのインスタンス Monad
.
(注することを確認 Monad
まれに従monad 法令 のほか、不適合のmonad タイプ ありすぎでもウのタイプのシステム。まえの依存型かでも本格的定理自動式試験器です。)
他のヒント
それは確かにあなたの質問のタイトルが尋ねるとモナドを実装する言語は、はが静的に型付けされなければならない場合ではありません。それはあなたが概説的な理由のために、良いアイデアかもしれませんが、コンパイル時に検出されることに失敗し、エラーは誰にも止めたことはありません。ただ、人々はPHPを書くどのように多くのを見てみます。
あなたはStateモナドのためのクロージャを必要とします。私はそれを見上げ、PHP 5.3以降閉鎖されています。だから、もはや問題ではないでしょう。
いいえ、PHPでモナドを実装することはできません。あなたはそのためのクロージャを必要とします。決して少なく、あなたはパターンクラスとのマッチングをシミュレートしたときに多分の概念は、まだ役に立つことができます:
abstract class Maybe {
abstract public function isJust();
public function isNothing(){
return !$this->isJust();
}
}
class Just extends Maybe {
protected $val = null;
public function __construct($val){
$this->val = $val;
}
public function isJust(){
return true;
}
public function getVal(){
return $this->val;
}
}
class Nothing extends Maybe {
protected $val = null;
public function __construct(){
}
public function isJust(){
return false;
}
}
function just(){
print "isJust";
}
function nothing(){
print "nothing";
}
function MaybeFunc(Maybe $arg){
if(get_class($arg) == 'Just'){
print "Just";
} else {
print "Nothing";
}
}
MaybeFunc(new Just(5));
MaybeFunc(new Nothing());