関数型プログラミングと純粋関数型プログラミング言語に関する意見まとめ
参照透過で副作用を伴わない純粋関数は理想でしかなくて、UI がAPI でしか取得できない情報に依存するなら上流で副作用を巻き取ったりContext 使ったりするより、実際に利用するコンポーネント自身に必ず副作用を実装するのは考え方としてシンプルなんだよな
2021-11-29 04:58:55Lispは別として、純粋関数型に寄せていくって流れは結構無理がある、というか、ドメインを選ぶんじゃないかなあ、という気がしているんだが。まあ、確証はない。
2021-11-29 07:42:51@excelspeedup そうですねー 純粋でない言語ではモナドを使うべきではないか?と言われると 関数の中に副作用を混ぜないことを徹底すれば十分効果はありますし モナド則を満たすように使えば、モナドとして効果が十分かどうか?はたしかに気になるテーマです。
2021-11-29 08:50:21@tompenguin_ 安全に実行できるかどうかはモナドの要件には入っていないと思っています 純粋関数型言語で実行すると、結果的に安全性が担保されるはあるかもしれませんが 仮にjqueryがモナドの要件を満たしていたとしても、それはインスタンスの一つにしか過ぎず、jqueryはモナドそのものと言うのは厳しいのですよね
2021-11-29 19:06:54@tompenguin_ 言語的な遷移だと C,PHP->Scala->elm って感じで、手続きから徐々に純粋関数型に移っていき コップ本(Scala)やelmガイドなど guide.elm-lang.jp をひたすらに読んで実践してって感じです。 ちなみに僕は手段として使えれば良いので、あんまりモナドとか圏論とかは詳しくないです…
2021-11-29 19:21:33「Rust + 純粋関数的 + ドメインプリミティブで安全で予測可能な設計を実現する」的な記事を書いてみるか。 Rust #Qiita qiita.com/advent-calenda… #Qiita
2021-12-01 15:55:34純粋関数はとても良い。Immutableはデータ構造なので、純粋関数を保てるのであればこだわりすぎる必要はない気もする。(なぜ、純粋関数がよいのかはここでは言及しない
2021-12-02 13:08:08関数型プログラミングは決して純粋関数型プログラミング言語だけのものではありませんが、自動的に純粋性が保証される純粋関数型言語と、確かめる方法はないけど頑張れば純粋性を満たせるかもしれないねという言語では、使い勝手が段違い! 頑張らない人にこそ、純粋関数型な言語がお勧めです! twitter.com/j5ik2o/status/…
2021-12-03 01:26:48純粋関数型言語を使ってないけど、ドメインモジュールだけは純粋関数的に設計するようにしている。効能はこの記事に書いたとおり。 zenn.dev/j5ik2o/article…
2021-12-01 09:19:06以前のuntypedはそうではなかったけど、akka-typedのアクターは非純粋で可変な状態を扱うけど、アクターの振るまい自体は純粋関数的に記述できる。このおかげでテストしやすくなったというのはあると思う。
2021-12-03 09:57:15関数の純粋性の大切さを強調したり関数型プログラミングの有用性を声高に説くわりに、純粋関数型言語を使うのだけは頑なに拒む人たち、なぜなのか
2021-12-04 01:44:48@cubbit2 純粋関数は単純で調べれば簡単に小学生でも定義が分かり理解できます。 純粋関数型言語は純粋(関数型言語化)のように純粋が関数型言語にかかってます。そしてそれを調べると、、、
2021-12-04 08:19:06自分が学ぶ時は純粋関数型言語を使えばいいと思うけど、そうじゃない時は言語が変わるだけで抵抗されるから、純粋関数型言語で紹介しづらいなぁ。 twitter.com/cubbit2/status…
2021-12-04 09:06:58そういえばIdrisはwikipediaには純粋関数型プログラミング言語って書いてあるけど公式ページには書いてないな
2021-12-04 09:32:56純粋であることや関数型であることが必ずしも「純粋関数型言語であること」にはならないかな。仮にそうならないならすでにHaskellがマジョリティになってるだろうし。まあ個人的に好きですが。とはいえ局所的に純粋関数的であればよいこともあるしそもそも言語の選定は他の条件にも左右されますよね twitter.com/cubbit2/status…
2021-12-04 10:38:10人は極端が怖いんだろうな 退路を用意したいと言うか 何度か言ってるけど、想像での批判は楽だと思うけど 純粋ではない関数型言語を入れたときの気持ちを思い出して、純粋関数型プログラミング言語を内部向けツールで良いから使ってみてほしい たぶん視界が変わるから
2021-12-04 13:05:26@cubbit2 丁寧にありがとうございます。 簡素な説明になりますが、Monadの扱い方によっては純粋関数のメリットを失うことは簡単におきて、それは処理系でもどうにもしてくれないという事を伝えたかったです。
2021-12-04 14:20:23@cactaceae モナドの使い方によっては純粋関数のメリットが失われる……????? たとえばどんな使い方のことなんでしょう……?????
2021-12-04 14:33:00@cubbit2 Haskell詳しくないので間違ってたら申し訳ないんですが、unsafePerformIOをつかなくても、Monadを返す関数が作れればその関数は純粋関数ではないという認識ですが、間違ってる部分があれば教えてください。
2021-12-04 14:53:58@cactaceae それはモナドに対する典型的な誤解ですね モナドとはbindとpureという2つの純粋な関数の組で、これらの純粋な関数をどう組み合わせても、もちろん純粋です たとえば、標準出力で使う関数 putStrLn は IO () を返しますが、このputStrLn は間違いなく純粋な関数です hackage.haskell.org/package/base-4…
2021-12-04 15:02:33@cactaceae あー、わかりました >純粋関数型はすべての関数で 副作用 を許しません。つまり、Haskell はコンソール、データベース、他システム等とやりとりすることはできません。...というのは嘘で この「嘘」は後半の「データベースを使えない」を指してて、前半の「純粋関数型~副作用を許さない」は本当です
2021-12-04 15:09:45@cactaceae 「モナドとはbindとpureという2つの純粋な関数の組」はちょっと微妙な表現だったかもです…… モナドとは、型構築子Mと、モナド則を満たすbind とpureという関数からなる3つ組、というのがHaskellでのモナドの通常の定義です 詳しくは入門書を参照して頂ければ
2021-12-04 15:30:36