Haskell で I/Oを伴うマルチスレッドプログラムを開発していると、タイミングに依存するバグや意図しない停止など、デバッグが非常に難しい問題に直面することがよくあります。 GHCのeventlog*1 と聞くと、ThreadScope*2 のようなツールに読み込ませてパフォーマンスのプロファイリングや並行性の可視化を行うための入力データ、という印象を持っている方も多いかもしれません*3。 しかし、eventlogにはRTS(ランタイムシステム)レベルの微細な挙動が記録されるため、その出力内容自体がマルチスレッドプログラムのデバッグにおいて非常に有用です。この記事では、デバッグ目的でのeventlogの活用方法を紹介します。 デバッグの役に立つ軽量スレッドのイベント eventlogには、Haskellの軽量スレッドのライフサイクルに関する様々な情報が出力されます。特にデバッグで役立つ
この記事は Haskell Advent Calendar 2025 の第 25 日目の記事です。 現在、Haskell で TLS 1.3 サーバーの実装に取り組んでいます。目標は、Chrome で https://localhost:8443 にアクセスすると「Hello over TLS!」と表示されるような、簡単な HTTPS サーバーが動くことです。 ソースコードを pizzacat83/tails にて公開しています。なおタイトルの通り、まだ動いていません (アドカレ期間内に動かしたかった…😣)。 ↑なんとなくロゴも作った。その結果、λ って猫だなと気づいた このプロジェクトでは、TLS 1.3 の仕組みの理解を深められるよう、なるべくライブラリに依存せず大部分の処理をスクラッチ実装しています。なお、HMAC など暗号関連のプリミティブや、TCP でデータを送受信する処理はラ
Tweet この記事はHaskell Advent Calendar 2025の7日目の記事です。 本日は、「Haskell製ウェブアプリケーションフレームワークを作る配信」で配信していた、Haskell製ウェブアプリケーションフレームワークを作るプロジェクトについて振り返ります。Servantのような型安全なAPI定義を、(Servantのような)高度な型レベルプログラミングも、(Yesodのような)TemplateHaskellもなしに可能にするライブラリーを目指していましたが、開発を途中で止めることにしました。その振り返り — とりわけ、そのゴールに基づいて実装するのが困難だと分かった機能などを中心にまとめます。 Contents 動機 できたもの (1) 最も単純な例 (2) ステータスコードを指定した例 (3) パスの中に含まれる整数を処理する例 Content-Typeを複数指
いや別に飛行機の中でビルドするのが主題なわけではないのですが、オフラインモードのことを機内モードと言いますからね。最近の飛行機は Wi-Fi の提供があったりするらしいですが。 さて、あなたの Haskell プロジェクトをオフラインモードでビルドすることができますか? まあ、今時オフライン環境も珍しいですし「そんな必要あるのか?」という感覚もあるかもしれません。Nix ではビルド再現性のためにオフライン環境でビルドできることが求められます1。 Nix で Haskell プロジェクトをビルドするには Input Output(iohk.io)の作成した haskell.nix が使用されるのが普通です。 github.com これは cabal ファイルや stack ファイル、もしくは plan ファイルを入力とし、Cabal のパッケージひとつにつきひとつの Nix デリベーションに
English version: An Unofficial Guide to What's New in GHC 9.14 - Mizuki's Blog GHC 9.14.1-alpha1が2025年8月20日にリリースされました。 GHC 9.14.1-alpha1 released - Announcements - Haskell Community この記事では、GHC 9.14の新機能を筆者の独断と偏見に基づき確認していきます。過去の類似の記事は GHC 9.2の新機能と、GHCの動向2021 GHC 8.10とGHC 9.0の新機能 GHC 9.4の新機能 GHC 9.6の新機能 GHC 9.8の新機能 GHC 9.10の新機能 GHC 9.12の新機能 です。 この記事は網羅的な紹介記事とはなっていません。特に、筆者が詳しくないRTSやTemplate Haskell周り
プログラミングをやっていると、「関数に副作用がある」とか「副作用がない」あるいは「純粋である」という話をちょいちょい耳にする。そして、「外界の状態を読み取るけど変更はしない関数」、例えば function getTime() { return Date.now(); } のような関数に副作用があるか?みたいな議論が始まったりする。 くだらない議論だ。 何か概念を定義するときは、それが「役に立つ」場面を提示できる必要がある。「関数の副作用」を定義するときは、「関数の副作用」がわかったときに何をしたいのかをはっきりさせる必要がある。「関数のどういう側面に注目したいか」を決めずに「副作用の有無」を論じるのはナンセンスだ。 ここでは、言語処理系(コンパイラー)を実装する者の立場で、関数の副作用について論じてみたい。 一般に、「副作用がない」関数の呼び出しは、「副作用がある」関数の呼び出しに対するも
概要 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日目の記事です。 TL; DR:Haskell にも Rustにもよいところがあるので、お互いいいとこ取りをしていきたいですね! はじめに:転職しました このたび諸般の事情[1]により転職しまして、2024年11月から株式会社JijというところでRustを書いております。 筆者はかれこれ17年くらいはHaskellを書きつづけており、前職でもほぼ全てのものをHaskellで書いていたくらいには生粋のHaskellerです。今回もできればHaskellを書く仕事をできると
この記事は 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
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
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く