プログラミングをやっていると、「関数に副作用がある」とか「副作用がない」あるいは「純粋である」という話をちょいちょい耳にする。そして、「外界の状態を読み取るけど変更はしない関数」、例えば function getTime() { return Date.now(); } のような関数に副作用があるか?みたいな議論が始まったりする。 くだらない議論だ。 何か概念を定義するときは、それが「役に立つ」場面を提示できる必要がある。「関数の副作用」を定義するときは、「関数の副作用」がわかったときに何をしたいのかをはっきりさせる必要がある。「関数のどういう側面に注目したいか」を決めずに「副作用の有無」を論じるのはナンセンスだ。 ここでは、言語処理系(コンパイラー)を実装する者の立場で、関数の副作用について論じてみたい。 一般に、「副作用がない」関数の呼び出しは、「副作用がある」関数の呼び出しに対するも
1. 「Haskellは純粋関数型言語だから副作用がない」っていうの、そろそろ止めにしませんか? 2. はじめまして! 👋😄 3. 🇯🇵自己紹介 + 宣伝 1: 4. 🔰自己紹介 + 宣伝 2: 5. 📝今日話すこと 6. ⚠️おことわり 7. どうして「純粋」なのか 8. Haskell が生まれた背景 9. Haskell 以前の IO 10. Haskell 1.0 - 1.2 の IO (1) 11. Haskell 1.0 - 1.2 の IO (2) 12. Haskell 1.0 - 1.2 の IO (3) 13. Haskell 1.0 - 1.2 の IO (4) 14. Haskell 1.0 - 1.2 の IO (5) 15. Haskell 1.0 - 1.2 の IO (6) 16. Haskell 1.0 - 1.2 の IO (7) 17. H
概要 Haskellの勉強用にIHaskellを検討したがなんだか面倒そうなので、超簡単なGHCi用のkernelを自分で作ってHaskellの勉強をしようと考えた。 簡単なkernelなので機能は限定されるかもしれませんし、まだHaskellの勉強を始めたばかりなのでどんな機能が必要かもわかっていませんが作ってみました。 実行環境 > sw_vers ProductName: macOS ProductVersion: 15.4.1 BuildVersion: 24E263 > ghci --version The Glorious Glasgow Haskell Compilation System, version 9.12.2 > python --version Python 3.12.7 > jupyter --version Selected Jupyter core pac
I stumbled over Bart de Goede’s article on building a full-text search engine in 150 lines of Python, and was reminded of my quest to show how useful Haskell is for solving real-world problems. Python is an eminently practical language, so nobody is surprised this can be done in Python. But Haskell? The Python code spends a lot of time updating mutable dictionaries. Surely we cannot easily port th
Haskeller の異常な愛情:または、生粋の Haskeller は転職して Rust を一ヶ月半書いて何を思うようになったか この記事は Jij Advent Calendar 2024、Haskell Advent Calendar 2024、およびRust Advent Calendar 2024シリーズ2 の18日目の記事です。 各カレンダーの前後の記事は以下の通りです: Haskell Advent Calendar 2024 前の記事: 次の記事:gotoki_no_joe さんの「集めるDPについて」 Rust Advent Calendar 2024 シリーズ2 前の記事:yasuo-ozu さんの「本物のSpecializationをStable Rustで!」 次の記事:hyumanase さんの「Rust.Tokyo 2024 に初参加した」 Jij Advent
この記事は Haskell - Qiita Advent Calendar 2024 - Qiita の 5日目の記事です。 純粋関数型言語の Haskell では、値は基本的に不変です。リスト、Set、Map など基本的なデータ構造も不変データ構造として提供されています。 不変なデータ構造は変更をしても、変更前の値が残ります。結果、データを変更したあとも以前のデータを参照することができるという特性が得られます。この特性を指して、不変なデータのことを「永続データ」と呼び、永続データを駆使して問題を解くことを「永続データプログラミング」と呼ぶことがあります。 Haskell で関数型プログラミングをすると、自然と永続データプログラミングを実践することになります。 永続データプログラミングを支えるのが「永続データ構造」の存在です。 不変なデータで変更を表現するには、元のデータをコピーして、それ
この記事はHaskell Advent Calendar 2024の6日目の記事です。 概要 Haskell向けのLLMのフレームワーク (Intelli Monad)を作成し、自立エージェントであるアプリケーションに組み込みました。 このフレームワークは型安全なFunction CallingやStructured Outputを提供し、チャットの履歴をモナドで管理し、履歴の永続化を行います。LLMにはOpenAIを利用し、履歴の永続化にはPersistentライブラリを利用しています。LLMの入出力が型安全であるため、Hspecなどの既存のユニットテストでテストが可能です。 目的 Haskellを使ってLLM(大規模言語モデル)を自立エージェントであるアプリケーションに組み込むことが目的です。 組み込み対象のアプリケーションには、次の二つのパターンが存在します。一つはヒューマン・イン・
TL; DR ReaderTパターンなどa -> f bが必要な場面でReaderTと同型なStarを採用すると、Profunctor関連の強力な表現力を利用できます。 はじめに この記事は仙骨マウスパッド[1]アドベントカレンダー[2]2024 [3]の記事です。 対象読者 Haskellの基本文法と、メジャーな型クラス(Functor, Applicative, Monad)に親しんでいることを前提知識としています。すなわち、モナドチュートリアルをすっとばします。 Haskellが一切関係ないアドベントカレンダーに書く記事としてはいささか不適切ですね。さまざまな場合、綺麗な模様だと思って眺めてください。 ReaderT と Star の類似性 Star は profunctors [4] パッケージで定義された型で、
This article explains my best current practice on asynchronous exceptions in Haskell using the standard library - Control.Exception. Other libraries for safe exceptions are out of scope. The followings are the definitions of two kinds of exceptions. Synchronous exceptions are ones raised by your actions. You can throw a synchronous exception to yourself via throwIO. Asynchronous exception are ones
リストのconsの型をA -> list A -> list AではなくA -> list (list A) -> list Aにした型をHaskellとCoq/SSReflectで定義したいHaskellCoqssreflectリスト形式検証 はじめに 本記事はTPP2024で発表した内容になります。 リストlistの型は通常nilとconsの2つのコンストラクタから定義されますが、 型変数Aに対し、cons A型をA -> list A -> list AではなくA -> list (list A) -> list Aに変更した型をHaskellやCoq/SSreflectで定義する方法について記述します。 ソースはこちら Haskellで定義する まず、この型の名前をSSeqとしてHaskellで実装したものは以下のようになります。
Parallel property-based testing with a deterministic thread scheduler Posted on Aug 7, 2024 This post is about how to write tests that can catch race conditions in a reproducible way. The approach is programming language agnostic, and should work in most languages that have a decent multi-threaded story. It’s a white-box testing approach, meaning you will have to modify the software under test. Ba
TL;DR GHC 9.10 から WASM バックエンド(クロスコンパイラ)が JavaScript FFI に対応したので、Haskell コードを Cloudflare Workers 上で動かしてみたよ。快適に開発するための環境構築・ハック方法と、GHCの出力をCloudflare Workers 向けに修正する方法を紹介するよ。 2025-02-08 追記 GHC WASM Backend のBindstが大幅に進化し、Earthlyとかは要らなくなりました。 以下の節を御覧ください: はじめに──Asterius から GHC WASM バックエンドへ GHC は 9.6 から WASM バックエンド(クロスコンパイラ)を搭載していますが、GHC 9.10 から WASM バックエンドが遂に JavaScript FFI に対応しました。 従来から C FFI には対応しており
CERT Coordination Center (CERT/CC, Carnegie Mellon University)は4月10日(米国時間)、「VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows」において、Windows上で動作する複数のプログラミング言語から引数を適切にエスケープしない脆弱性を発見したと報じた。この脆弱性はアプリケーションのコマンドインジェクションにつながるとして注意を呼びかけている。 VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows 脆弱性の詳細 多くのプログラミング言語にはオ
GHC 9.10.1が2024年5月11日にリリースされました。 GHC 9.10.1 is now available! - Announcements - Haskell Community この記事では、GHC 9.10の新機能を確認していきます。過去の類似の記事は GHC 9.2の新機能と、GHCの動向2021 GHC 8.10とGHC 9.0の新機能 GHC 9.4の新機能 GHC 9.6の新機能 GHC 9.8の新機能 です。 この記事は網羅的な紹介記事とはなっていません。是非、公式のリリースノート類も参照してください: 2.1. Version 9.10.1 — Glasgow Haskell Compiler 9.10.1 User's Guide docs/users_guide/9.10.1-notes.rst · ghc-9.10 · Glasgow Haskell
これはHaskell Advent Calendar 2023の19番目の記事です。 フォーマッター 以前、フォーマッターをいくつか試しましたが、どれもイマイチでした。しかし、fourmoluはいけてます。fourmoluは、Ormoluのフォークで、Ormoluが偉大なのでしょう。両方試しましたが、僕はformoluに決めました。 Hackageに上がっているので好きな方法でインストールしてください。 % cabal install fourmolu formoluにHaskellのプログラムを渡すと、整形したプログラムを出力してくれます。ファイルの内容を直接書き換えたいときは、-iオプションを渡します。エディタやIDEと連動できますが、お試しでプロジェクト全体を整形するには、以下のようにするといいでしょう。 % find . -name "*.hs" | xargs fourmolu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く