並び順

ブックマーク数

期間指定

  • から
  • まで

121 - 160 件 / 700件

新着順 人気順

haskellの検索結果121 - 160 件 / 700件

  • Generate web forms from pure functions

    This is an announcement post for my “Grace browser” project, which you can find here: trygrace.dev This project is a web page which can dynamically convert a wide variety of functional programming expressions to their equivalent HTML. This conversion can even auto-generate interactive web forms from functions, which means that people without web programming knowledge can use the Grace browser to c

      Generate web forms from pure functions
    • Haskell Libraries I Love

      2022-05-29 I just wanted to share some of my favorite Haskell libraries, and why I love them. Most of my projects use most of these libraries. relude: Alternative Prelude More convenient Re-exports common types, type classes, and functions from base, containers, text, bytestring, etc. Types: Text and LText, ByteString and LByteString, etc. Type classes: Alternative, MonadIO, Generic, etc. Function

      • Compiling a subset of JavaScript to ARM assembly in Haskell - Micah Cantor

        A toy compiler for a subset of JavaScript to ARM assembly, using Haskell. Published: May 29, 2022 I recently got a copy of the book Compiling to Assembly from Scratch by Vladamir Keleshev, which details how to write a compiler for a subset of JavaScript to 32-bit ARM assembly code. The choice to use ARM assembly is mainly for its simplicity in comparison to x86. Keleshev elects to use TypeScript t

          Compiling a subset of JavaScript to ARM assembly in Haskell - Micah Cantor
        • GHC 9.2 で導入されたQuick Look型推論アルゴリズムについて - 朝日ネット 技術者ブログ

          初めまして、朝日ネット開発部の hogeyama です。 今回は Haskell の中級的なトピックとして、 GHC 9.2 で導入された Quick Look 型推論アルゴリズムを取り上げようと思います。 概要 Haskell のデファクトスタンダードなコンパイラである GHC では通常の多相(ジェネリクス)の一般化である非可述的多相(impredicative polymorphism)を実装していますが、その型推論アルゴリズムは長らく「型推論が弱い」「実装が不安定でコンパイラのバージョンアップでデグレが起きる」といった問題を抱えていました。 しかし昨年10月、Quick Look という新しいアルゴリズムが GHC 9.2 に実装されたことでこの問題が解決しました。 本記事ではこの Quick Look によって何が変わるのか、利用する際に何に気をつければよいのかを非可述的多相の概要

            GHC 9.2 で導入されたQuick Look型推論アルゴリズムについて - 朝日ネット 技術者ブログ
          • 型システム入門

            レビュー (日本語訳) 読み始めてから約3年ほどのゆったりペースで読み終わりました。 通称: TAPL (TaPL) (Haskell の) 型システムについて学習するために何か良い本ありませんか?と聞かれればたぶん全員がこの本をおすすめするんじゃないでしょうか。 最初から読めば最高にわかりやすい型システムの入門書です。しかし、多くの人が挫折している入門書です。(入門書詐欺という声もよく見かけますが、そんなことは無いです。ただたんに内容が難しい入門書というだけです) 特に書籍が分厚い (さらに1ページの情報量が多い) のでほとんどの人が11章の単純型付きラムダ計算の拡張の章を読み終わる前に途中で読むのをやめてしまっているような気がします。少なくとも11章までは読むべきです。この辺りまでであればインターネット上に解説などもあるため、ふんわりした理解でも読み進めることができると思います。また、

            • 依存関係と階層構造の軛 - モナドとわたしとコモナド

              21世紀現在のプログラミング言語において、モジュールという機能はほぼ必要不可欠である。ソースコードを分割し、明示的な依存関係を指定する仕組みであるモジュールは、以下のような様々な恩恵をもたらす。 インクリメンタルビルド: モジュールごとにコンパイル結果を保存し、変更されていない部分を再コンパイルするのを防ぐ。 内部の隠蔽: 実装の詳細を隠蔽し、モジュール外から触れないようにする。プログラムの見通しをよくしたり、不正な操作をする機会を減らす。 アーキテクチャの整理: モジュールは他のモジュールを参照できるが、原則として相互参照はしない。依存の向きを定めることで、適切な抽象化と、 それに基づいた実装の分離を促す。 さて、いくらモジュールが便利と言えど、数が増えすぎるとさすがに扱いにくい*1。そのため、ディレクトリの構造をモジュールの階層構造として運用する仕組みが備わっていることが多い。 コンパ

                依存関係と階層構造の軛 - モナドとわたしとコモナド
              • Learn You a Haskell for Great Good! | A community version

                Hey yo! This is an up-to-date open-source fork of the original Learn You a Haskell (LYAH for short) by Miran Lipovača, "the funkiest way to learn Haskell, the best functional programming language around". This guide is meant for people who have programmed already, but have yet to try functional programming. Now, why did I create this fork? ("fork" means a copy of an original which may be modified

                • よわよわエンジニアがTAPL(型システム入門)を読んだら

                  こんにちは,sititou70です.私は社会人2年目のよわよわWebフロントエンドエンジニアであり,「数学」とか「証明」とは無縁の人生を送っています. そんな私ですが,がんばって型システム入門(通称:TAPL)という本を読み終えました.全32章,503ページ,牛乳パック1本分の重さがあり, 自立します. 自立する本は大抵やばいです. TAPLの序文を見ると,想定読者は プログラミング言語と型理論を専門とする大学院生および研究者 プログラミング言語の鍵となる概念に触れたい,計算機科学の全分野の大学院生および習熟度の高い学部生1 となっています.本記事では 「そんな本を,学生や専門家でない人間(私)が読んだらどうなるのか」 について書きます.専門的な用語は避けますので,TAPLの雰囲気だけでも感じ取ってもらえたら嬉しいです. どうなったのか 宇宙語が読めるようになった 「型安全」を説明できるよ

                    よわよわエンジニアがTAPL(型システム入門)を読んだら
                  • Introductory resources to type theory for language implementers

                    This post briefly tours resources that helped introduce me to type theory, because I’m frequently asked by others for resources on this subject (even though I never had a formal education in type theory). Specifically, these resources will focus more on how to implement a type checker or type inference algorithm. Also, my post will be biased against books, because I don’t tend to learn well from r

                    • So Long Surrogates: How we moved to UTF-8 in Haskell

                      We released a blazingly fast Aho-Corasick implementation, written in Haskell, in 2019. This implementation was based on UTF-16 strings, since Haskell's text library uses that for its internal string representation. However, the most recent major update of text changed its internal string representation from UTF-16 to UTF-8. This is good news for us, since most of our customer’s data is ASCII, this

                      • Free monads in the real world

                        After finishing my master’s degree, I applied to several companies I was interested in. During one of the selection processes, the interviewer asked me to do the following exercise: “Write a stack-based interpreted language that includes: literals, arithmetic operations, variables, and control flow primitives. As a bonus, add asynchronous primitives such as fork and await.” Fortunately, I was alre

                        • GitHub - tfausak/rampart: :european_castle: Determine how intervals relate to each other.

                          You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                            GitHub - tfausak/rampart: :european_castle: Determine how intervals relate to each other.
                          • Haskellでちょっとしたスクリプトを書く

                            Haskellで本格的に開発する際はcabalなりstackなりでプロジェクトを作るわけですが、ファイル一つで済むような(書き捨て)スクリプトをHaskellで書きたい場合があります。 依存関係のないスクリプトであれば、普通にファイルを作ってrunghc/runhaskellすれば良いでしょう。しかし、Haskellには標準ライブラリー(base)以外にも「準標準」と呼べる外部のライブラリーが多数あり(例:bytestring, text, vector)、それらに明示的に依存することはrunghcではできません。 そこで使えるのが、cabal scriptやstack scriptと呼ばれる機能です。歴史的にはstack scriptの方が古く(いつ?)、cabal scriptは2018年ごろに実装された比較的新しい機能です。 RFC: Add support for "#! /usr

                              Haskellでちょっとしたスクリプトを書く
                            • NixによるHaskell開発環境の構築 - syocy’s diary

                              Nix package manager によって Haskell のスクリプティングおよびパッケージ開発の環境構築をしていく。 こいついつも環境構築してんな ここで触れられないこと Nix スクリプティング ちゃんとした開発 haskell-language-server の導入 パッケージの設定 高度な依存関係オーバーライド トラブルシューティング nix-shell の立ち上がりが遅い cabal run で cabal 自体の出力を無視したい Mac で nix-env -i が失敗する Mac で channel が消滅する こいついつも環境構築してんな 環境構築以外はブログに書くような一般性のあることをやっていないということで……。 ここで触れられないこと cabal.project によるマルチプロジェクトを扱う方法 外部の nix store を使うこと nix の新しいコマ

                                NixによるHaskell開発環境の構築 - syocy’s diary
                              • 執筆中:「Haskellでの型レベルプログラミング」 | 雑記帳

                                最近、「Haskellでの型レベルプログラミング」という「本」を執筆している。まだ完成ではないが、以下のリンクから読める: Haskellでの型レベルプログラミング なぜHaskellか 最近いろんな言語が出てきている中で、Haskellの強みとは何だろうか。人によって答えは色々あるだろうが、筆者にとってHaskellの魅力的な側面は強力な型システムである。どのくらい強力かというと、型レベルでプログラミングができ、依存型の模倣さえもできてしまう。 (依存型をやりたいなら最初から依存型のある言語を使えという意見は尤もだが、それはそれとして。) Haskellでの型レベルプログラミングの解説記事というのは、英語圏ではちらほら見かけるが、日本語圏ではあまり見ない。2018年(原文は2017年)に公開された Haskellにおける型レベルプログラミングの基本(翻訳) – Qiita が数少ない例で

                                • Functional Programming in TypeScript

                                  Web apps are a mandatory part of every modern application nowadays, no matter how small or complex it is. From one-click apps that convert pictures to Photoshop, everyone wants fast and easy access to the app, and the web is one of the easiest ways to do that. At Serokell, we use TypeScript for writing web applications. But our main programming language is Haskell. And in this article, we want to

                                    Functional Programming in TypeScript
                                  • Algebraic Data Types in Haskell

                                    Most programming languages have a way to make compound data types. In Haskell, we can do that via algebraic data types. Even though the name might sound scary at first, it’s simply a way to construct types. This article will introduce you to the concept of algebraic data types and show you how to use them. Read further to learn: how to create your own custom Haskell data types; what product and su

                                      Algebraic Data Types in Haskell
                                    • 💣Webフロントエンドにおける関数型「風」プログラミングに関する個人的まとめ - Qiita

                                      ここ数年の流れについて 技術的側面 Webフロントエンド(ほぼTypeScript&React界隈)において、オブジェクト指向(厳密に言うとクラスの利用)から脱却する流れがあります。原因は以下の2点。 クラスの継承の問題点が(IT業界全体に)広く定着したこと JS/TSの進化、Reactの進化、関数型言語の考え方などの影響により、クラスを用いてデータと関数群を紐づけるメリットが薄くなったこと 現状、設計レベル(実務的にはどの関数を纏めてモジュール化するのか、モジュール同士をどう繋ぎ合わせるのか、フォルダ割りどうするのか等)のノウハウがまだ固まっておらず、既存の設計論はそれなりに有効です。 コミュニティ的側面(政治) これらの流れはWebフロントエンドの中でもTypeScript&Reactの界隈が主導しており、そのノウハウは長年絶対視されてきたオブジェクト指向を解体するような内容であったた

                                        💣Webフロントエンドにおける関数型「風」プログラミングに関する個人的まとめ - Qiita
                                      • Haskellでの型レベルプログラミング

                                        Haskellでの型レベルプログラミングの解説書です。

                                          Haskellでの型レベルプログラミング
                                        • Haskellと余代数(Coalgebra) - 朝日ネット 技術者ブログ

                                          ここではHaskellの中級者向けのトピックを簡単に取り上げたいと思います。 今回は余代数(Coalgebra)についてです。Haskellを書いていると『余(なんとか)』という言葉をみかけることがあります。これは英語の接頭辞 Co- の訳で、ここでは代数(Algebra)の双対(Dual)という意味で余代数と呼ばれています。 さてHaskellやOCamlのデータ型は一般に代数的データ型(Algebraic data type)と呼ばれます。このデータ型にパターンマッチングを加えて、(オブジェクト指向言語などと比較したときの)関数型言語の特徴と紹介されることも多いと思います。実はこのデータ型にはもともと余データ(Codata)と呼ばれるような相方がいたのですが、人類が扱うには早すぎたのか、データ型に比べると余データは長らく影の存在でありました(ちなみに余データは口語上はコデータと呼ぶかも

                                            Haskellと余代数(Coalgebra) - 朝日ネット 技術者ブログ
                                          • プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー

                                            原文(投稿日:2022/02/25)へのリンク Flixは多くのプログラミング言語にインスパイアされたオープンソースのプログラミング言語であり、開発者は関数型、命令型、論理型のスタイルでコードを書くことが可能である。FlixはScalaに似ており、Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している。JVM言語はポリモーフィックエフェクトシステムやDatalog制約などのユニークな機能をサポートしている。 FlixのプログラムはJVMバイトコードにコンパイルされ、開発者はFlix Visual Studio Code拡張機能を使用するか、online playgroundを使用して言語を評価することができる。 コミュニティはいくつかの原則に基づいて言語を開発している。例えば、NULL値を使わない、デフォルトでprivate、リフレクションを使

                                              プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー
                                            • 関数型プログラミング言語における関数適用構文の歴史的経緯についてのメモ - Arantium Maestum

                                              先日こういうツイートがあった: Haskellとかの関数型言語を使用しているプログラマの皆様にお聞きしたいんですけど、「関数名 引数 引数 ...」みたいな関数呼び出し構文って見にくくは無いですか?「関数名(引数, 引数, ...)」に慣れたこちらからすると、丸括弧が無いからコード中のどこが関数呼び出しなのかパット見で把握しにくい。— sounisi5011/プログラム (@sounisi5011Prog) February 22, 2022 「見にくくは無いですか?」と聞かれると、個人的には「全然大丈夫です」と答えざるを得ないのだが、次のツイートに関しては考えさせられた: 数式でも函数には丸括弧を使ってるのに、どこのタイミングで丸括弧が消失したのかわからないし、その選択をした理由も思いつかない。— sounisi5011/プログラム (@sounisi5011Prog) February

                                                関数型プログラミング言語における関数適用構文の歴史的経緯についてのメモ - Arantium Maestum
                                              • 文脈依存 PEG による Haskell パーサ

                                                前に PEG パーサジェネレータライブラリ ptera を作っているという話をしたが,今回はその第二弾.ptera で Haskell2010 の文法パーサを例に追加してみたんだが,その過程で色々あったのでその備忘録. 結論から言うと,ptera に前回から以下の拡張を加えた. 先読みを強化し,もうちょっとちゃんと機能するように 文脈依存でパースができるようにした 後は,Template Haskell で文法書けるようにしたりもしたが,まあそれはいいでしょ. Haskell2010 と ptera ptera でひとまず Template Haskell で文法が書けるフロントエンド部分作った後,Haskell 2010 ぐらいパースできないと使い物にならないなあと言う感じで Haskell の example project 書いてみたんだが,ここで色々つまづいてしまった.主に今回説明

                                                  文脈依存 PEG による Haskell パーサ
                                                • GitHub - eeue56/derw: An Elm-inspired language that transpiles to TypeScript

                                                  You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                    GitHub - eeue56/derw: An Elm-inspired language that transpiles to TypeScript
                                                  • Introduction to Free Monads

                                                    If you’ve been around Haskell circles for a bit, you’ve probably seen the term “free monads”. This article introduces free monads and explain why they are useful in Haskell development. To whet your appetite a little, free monads are basically a way to easily get a generic pure Monad instance for any Functor. This can be rather useful in many cases when you’re dealing with tree-like structures, bu

                                                      Introduction to Free Monads
                                                    • GitHub - HigherOrderCO/HVM: A massively parallel, optimal functional runtime in Rust

                                                      Higher-order Virtual Machine 2 (HVM2) is a massively parallel Interaction Combinator evaluator. By compiling programs from high-level languages (such as Python and Haskell) to HVM, one can run these languages directly on massively parallel hardware, like GPUs, with near-ideal speedup. HVM2 is the successor to HVM1, a 2022 prototype of this concept. Compared to its predecessor, HVM2 is simpler, fas

                                                        GitHub - HigherOrderCO/HVM: A massively parallel, optimal functional runtime in Rust
                                                      • What killed Haskell, could kill Rust, too

                                                        What_killed_Haskell_could_kill_Rust.md At the beginning of 2030, I found this essay in my archives. From what I know today, I think it was very insightful at the moment of writing. And I feel it should be published because it can teach us, Rust developers, how to prevent that sad story from happening again. What killed Haskell, could kill Rust, too What killed Haskell, could kill Rust, too. Why wo

                                                          What killed Haskell, could kill Rust, too
                                                        • Fix関数の教科書 (Haskell) - Qiita

                                                          fix関数についての解説記事が少なかったので、頑張ってかき集めた情報をまとめておこうと思います。 内容としては、 fix関数 <- 今ココ MonadFixと再帰的do記法 ArrowLoopと再帰的arrow記法 を複数の記事に分けて紹介します。 fix関数なら大体知っているよっていう人は、説明を飛ばして、後ろの練習問題から始めても楽しいと思います。 fix関数の仕組みはいいから、使い方だけ教えて~~っていう人は、fix関数の活用法から始めると幸せかもしれません。 この記事に載せているソースコードは、モジュールのimport文を省いています。なので、実際に手元の環境で動かしてみるときは、次のimport文をソースコードの冒頭に追加して実行してください。 import Control.Monad.Fix -- fix関数をインポート import Control.Monad.State -

                                                            Fix関数の教科書 (Haskell) - Qiita
                                                          • Why Liquid Haskell matters

                                                            Since the inception of the Haskell language, the community around it has steadily innovated with language extensions and abstractions. To mention a few, we had the IO monad, all flavors of type classes and constraints, Template Haskell, generalized algebraic data types (GADTs), data kinds, etc. Then we had to deal with the programs resulting from all this innovation, which eventually sprang feelin

                                                              Why Liquid Haskell matters
                                                            • Go の 構造体定義から Functional Options Pattern のコードを自動生成する CLI ツールを作った

                                                              Go でオプション引数を実現したいときによく Functional Options Pattern が使われるかと思います。このデザインパターンは便利な一方、構造体の中でオプション引数を用意したい全てのフィールドに対して、オプション引数用の関数を実装する必要があり、記述すべきコードが多くなりがちです。 この問題を解決すべく、Functional Options Pattern を実現するためのコードを自動生成する CLI ツール 「foggo」を作りました。 Functional Options Pattern とは Go はそのシンプルな言語仕様から、オプション引数を提供していません。 オプション引数はデフォルト引数やオプションパラメータとも呼ばれ、Python だと可変長引数である *args や *kargs のことを指します。 通常の関数であれば特に問題ないのですが、構造体の初期化

                                                                Go の 構造体定義から Functional Options Pattern のコードを自動生成する CLI ツールを作った
                                                              • GitHub - IHaskell/learn-you-a-haskell-notebook: Jupyter adaptation of Learn You a Haskell for Great Good!

                                                                Read the book right now on mybinder.org with this link: (Usually takes a minute to launch) This is a Jupyter notebook adaptation of the book Learn You a Haskell for Great Good! by Miran Lipovača. I learned Haskell from this book in 2014 by following along in GHCI, as the book suggested. In 2019, the Jupyter notebook format would be a nice way read this book. This is one of the best cases for Theod

                                                                  GitHub - IHaskell/learn-you-a-haskell-notebook: Jupyter adaptation of Learn You a Haskell for Great Good!
                                                                • 型安全で高速な連鎖行列積の計算

                                                                  この記事は Haskell Advent Calendar 2021 の22日目の記事です。 次のような3つの行列の積を考えてみましょう。 ABC = \begin{pmatrix} a_{00} & a_{01} & a_{02} \\ a_{10} & a_{11} & a_{12} \\ a_{20} & a_{21} & a_{22} \\ a_{30} & a_{31} & a_{32} \\ \end{pmatrix} \begin{pmatrix} b_{00} & b_{01} \\ b_{10} & b_{11} \\ b_{20} & b_{21} \\ \end{pmatrix} \begin{pmatrix} c_{00} & c_{01} & c_{02} & c_{03} & c_{04} \\ c_{10} & c_{11} & c_{12} & c_{13}

                                                                    型安全で高速な連鎖行列積の計算
                                                                  • Apple Silicon MacでのHaskell/GHCの現状・2022年3月編 - Qiita

                                                                    この記事は Haskell Advent Calendar 2021 の21日目の記事です。 2020年に発表されたApple Silicon (Arm) Macは、2021年に新チップ “M1 Pro/Max” が、2022年には新チップ “M1 Ultra” が登場し、ますます勢いを増しています。Mac使いの皆さんはもう手にされましたか? 新しいアーキテクチャーにはハードウェアだけではなくソフトウェアの対応も重要です。この記事では、2022年3月時点のApple Silicon MacへのHaskellエコシステムの対応状況をまとめます。 この記事では、なるべくRosetta 2を使わず、Armネイティブに動作する環境を構築することを目指します。 インストールにどれを使うか UnixでHaskell環境を構築する場合、 パッケージマネージャーを使う GHCupを使う Stackを使う

                                                                      Apple Silicon MacでのHaskell/GHCの現状・2022年3月編 - Qiita
                                                                    • Lensだけで作るニューラルネットワーク

                                                                      これは、FOLIO Advent calendar 2021 の15日目の記事です。 圏論を機械学習に応用する話題の一つとしてLensで微分可能プログラミングを実装する話を紹介したいと思います。とはいえ圏論など気にせずLensを使ったニューラルネットワークを実装していきます。学習モデル、誤差関数、学習係数などの基本的な構成要素が全てLens(ParaLens)として実装できる様子を楽しんでいただければと思っています。 Lensって何? Lensはいわゆる getter と setter を組み合わせたデータ構造です。すなわち型sのデータ型から型aの値を取り出すgetter s -> a と、型sのデータ型を型aの値で更新して新しい型sのデータ型を作成するsetter (s, a) -> s から成っています。

                                                                        Lensだけで作るニューラルネットワーク
                                                                      • コーディングについて思うこと垂れ流し

                                                                        ミライトデザイン Advent Calendar 2021 の 11 日の記事です カレンダーの右端は日曜日派の ほげさん ( zenn ) です Qiita のアドカレの右端は土曜日だったんですね、気を付けましょうね 血圧低い感じで、盛り上がりもオチもなく文字数制限のない Twitter のような駄文を晒します 導入 ある Haskell はいいぞおじさんの誕生のはなし 2014 年くらいだったか、大したきっかけもないけど Haskell を触った[1] 根本的な基礎力が足りなかったしダラダラやってたので、ちゃんと H 本の内容を最後の章まで理解できたのは多分 2016 年くらいだった気がする そのあと Haskell の考え方とコードって超クールだなって思ってこんなのを書いたりした 細かい内容は覚えてないけど、記事の内容はニュアンスとしては こんな ↓ 実装をやめて User find

                                                                          コーディングについて思うこと垂れ流し
                                                                        • 我田引水的な「関数プログラミングの入門」資料紹介 - あどけない話

                                                                          これは、Haskell Advent Calendar 2021の2日目を埋めるために書いた記事です。実は単に僕が作った「関数プログラミングの入門」の資料の宣伝です。 ちなみに、僕の関数プログラミングの定義は「不変データプログラミング」であり、おそらく最も厳しい定義です。なので内容が分かれば、関数プログラミングに入門できた言ってもよいのではないかと思います。 関数プログラミングことはじめ 僕は毎年、岡山大学の三年生に向けて、2コマで関数プログラミングを教えています。その資料が、「Cプログラマーのための関数プログラミングことはじめ」です。岡山大学工学部情報系学科の学生は、C言語を習っているので、C言語に似た文法を独自に定義して、関数プログラミングを説明しています。 [入門]関数プログラミング [入門]関数プログラミングは、WEB+DB PRESS Vol.67に掲載された記事です。編集部のご

                                                                            我田引水的な「関数プログラミングの入門」資料紹介 - あどけない話
                                                                          • 関数型プログラミングが『銀の弾丸』であるという非常識な常識2022

                                                                            2024年バージョンの全面改定された新しい本が公開されているので移動してください 関数型プログラミングをゼロからわかりやすく実用的に幅広い視点から解説!〜 圏論からFRPの構築まで a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022

                                                                            • GHCのIOマネージャの歴史と僕の苦悩 - あどけない話

                                                                              これは、Haskell Advent Calendar 2021 の8日目の記事です。 Haskellのコンパイラとして事実上一択となったGHCには、「軽量スレッド」が実装されています。軽量スレッドは、ネイティブスレッドよりも軽量なスレッドで、他の言語では「グリーンスレッド」とも呼ばれています。Haskellerが並行プログラミングをするときは、軽量スレッドを息を吸うかのように使います。 複数の軽量スレッドの入出力を束ねるのが、IOマネージャです。IOマネージャも単なる軽量スレッドであり、OSから入出力のイベントを受け取り、それぞれの軽量スレッドにイベントを通知します。 軽量スレッド(っぽい)機能を提供する他の言語では、GHCのIOマネージャを参考にしているようです。僕はIOマネージャの開発に深く関わっています。この記事ではIOマネージャの歴史をまとめるとともに、主にmacOSでの実装に関

                                                                                GHCのIOマネージャの歴史と僕の苦悩 - あどけない話
                                                                              • Rustで真に安全なプログラムを書く方法 - かとじゅんの技術日誌

                                                                                この記事はRust Advent Calendar 2021の12/8日の記事です。 Rust前提の記事として書きましたが、他の言語にも適用できる考え方なので、ほかの言語勢の方々もよければお付き合い下さい。 今回のテーマは「Rustで真に安全なプログラムを書く方法」についてです。 「真に安全なプログラム」の定義は以下とします。 挙動が安定し、結果が予測可能となる 正しさの基準に基づき、プログラムの間違いを検知することができる 「真に」とはドメイン知識に基づく正しさという意味です。詳しくは後述します。 それと「そもそもRustで実装されるプログラムは安全じゃないのか」という想定質問については「メモリの操作は安全。だが、それだけでは真に安全なプログラムにはならない」が答えになります。これについて興味がある方、ぜひ最後までお付き合いください。 「真に安全なプログラム」を実現するレシピとしては「関

                                                                                  Rustで真に安全なプログラムを書く方法 - かとじゅんの技術日誌
                                                                                • 「アルゴ式」をHaskellで学ぶための準備

                                                                                  この記事は、CAMPHOR- Advent Calendar 2021 の7日目の記事です。 「アルゴ式」というプログラミングを学んで実践できる非常に良質なWebサービスがあります。 アルゴリズムについて解説された教科書だけでなく、実際にプログラミングを書いて提出してオンラインでジャッジしてくれるシステムを備えた練習問題も用意されているのが特徴です。さらにこのオンラインジャッジシステムは多くのプログラミング言語に対応しており、その中にはHaskellも含まれています。 今回はこのアルゴ式を読むにあたって練習問題をHaskellで解くために必要になりそうな知識についてまとめました。アルゴ式は現在ベータ版なので将来的な変更で変わってしまうものもあるかもしれませんが、2021年12月現在の練習問題を全てHaskellで解いた上で必要になったものをまとめているので参考にしていただけると幸いです。

                                                                                    「アルゴ式」をHaskellで学ぶための準備