Haskell

Haskell で Open Telemetry を利用してオブザーバビリティーを向上させよう

Open Telemetry って何? この記事では Open Telemetry のトレースの機能を使います。トレースを使うと、サーバーを越境してコールグラフとその実行時間などを取得することができます。下の画像は Jaeger のスクリーンショットです。Jaeger は Open Telemetr…

wd コマンドをリリースした

wd コマンドって? これがしたかった。 hoge path/to/dir foo bar って実行したら、ワーキングディレクトリーが path/to/dir で foo bar コマンドを実行してくれるような hoge コマンドない?— かずき (@kakkun61) 2022年8月11日 $ wd ディレクトリー コマン…

Windows で Haskell SDL2

Hackage にある SDL2 ライブラリーを Windows で利用する方法のメモ。 hackage.haskell.org Haskell-jp の Slack の質問をきっかけに手元で試したことを思い出しながら書いている。 sdl2.cabal に下記の記述があるので C ライブラリーを事前にインストールす…

重ね着したバービー人形 in Haskell

うやむやで終わる記事なので事前にご了承ください。 前回のあらすじ (前回などないので探さなくていいです。) 高カインドデータ型(Higher-kinded Datatypes; HKD)というものがあります。 fumieval.hatenablog.com qiita.com 簡単に説明すると下記のよう…

GHC 演算子優先順位トリビア

GHC の演算子の優先順位には -1 がある(たぶん組込でしか使えない #Haskell pic.twitter.com/Xa0OIjvw5i— o̞͑kä̝mo̞͑to̞͑ kä̝zʊ̠kɪ̟ (@kakkun61) January 3, 2021

Case Analysis 関数

今回は case analysis と呼ばれる関数の話です1。 data D a b c = C0 a b | C1 c 例えば上記のようなデータ型があった場合 case analysis 関数は次のようになります。 d :: (a -> b -> d) -> (c -> d) -> D a b c -> d d f _ (C0 a b) = f a b d _ f (C1 c) …

続・刹那的純粋関数的データ構造と線形型

The English version is at Dev. 前回の記事の追加情報です。 kakkun61.hatenablog.com pure 抜け道はなかった まあ、こういうインターフェースでありがちな pure で外に出す抜け道が存在するのですが。 最後にこういうことを無思慮に書いたわけですが、Dev …

刹那的純粋関数的データ構造と線形型

The English version is at Dev. 『純粋関数型データ構造』(以降 PFDS)の5.2章に刹那的純粋関数的キューというものが出てきます。 https://asciidwango.jp/post/160831986220/%E7%B4%94%E7%B2%8B%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%87%E3%83%BC%E3%82%BF%E…

とりとめのない GHC 線形型メモ

GHC 9.0.1 alpha 1 がリリースされたときに線形型をいじってみていたことをメモしていなかったので思い出しながらメモしていく。 mail.haskell.org 使用バージョン GHC 9.0.0.20200925 上記リンクのもの ghcup ならそれ経由でインストールできる。 ghcups の…

Windows から Windows コンテナーと Linux コンテナーの両方の Docker を使う

Docker Desktop for Windows は Windows コンテナーと Linux コンテナーが使えるのだけど排他的になっている。 そう思ってスクショを取るために切り替えボタンを押してみたら今はそうじゃない?Windows/Linux コンテナーの切り替え、前は完全に排他的だった…

Data.Monoid.First と Data.Semigroup.First あるいは Last

Data.Monoid.First のドキュメントを見ていたら次の記述を見つけたことから始まる記事です。 This type will be marked deprecated in GHC 8.8, and removed in GHC 8.10. Users are advised to use the variant from Data.Semigroup and wrap it in Maybe. …

動的型付けインタープリター言語 Haskell

コンパイルを待つなんて生産性が低い! 通らないコード片のエラーなんか知らない! えっ?!まだ静的型検査してコンパイルしてるの? デキるプログラマーは動的型検査!インタープリット! main = do input <- readLn if input < 10 then putStrLn "Hi" else…

shake + lucid + hint で静的ウェブサイト生成

The English version is at Dev. 同人活動用のウェブサイトがあって今までは Jekyll で生成していました。これを Shake + Lucid + Hint で作成した生成器に置き換えました。 doujin.kakkun61.com shakebuild.com hackage.haskell.org hackage.haskell.org ソ…

一番簡単な MonadFail インスタンス

The English version is at Dev. 導入 fail が Monad から剥がされて早や幾年、私は失敗する可能性のある計算は MonadFail を使って型を付けるのが好きです。 foo :: MonadFail m => m a こうすると IO の文脈であればその中で、純粋な文脈であれば Maybe な…

Haskell 環境構築ツールフローチャートを作りました

前に環境構築についての記事を書いたのですが、初学者向けにパッと見て分かるようにフローチャートにしました。kakkun61.hatenablog.comGoogle ドライブ 図形描画のファイルはこちらです。コメントを付けることができます。docs.google.com

postgresql-pure を開発しました

この記事は Haskell Advent Calendar 2019 の6日目の記事です。 hackage.haskell.org postgresql-pure は Haskell の PostgreSQL ドライバー(クライアントライブラリー)で次のような目標で開発しました。 マルチコア環境でのパフォーマンス向上 暗黙のロッ…

FFI で Haskell から Rust を利用する

Rust で作ったライブラリーを静的リンクして Haskell(GHC)から使う例と説明を書いた。 github.com

GHC 環境構築 概観 と PowerShell

Haskell の開発環境を構築する方法は何通りかあり、新しいツールが出ると「今はこれだ」とほめるブログも公開されますがそれが初学者を混乱させることがよくあります。 本記事ではビルドツールのインストールにしぼり、開発支援、例えば ghc-mod・haskell-id…

最近の自分の Haskell 開発環境(Windows)

id:syocy のブログを見たので Windows で自分がどうしているかをメモしておく。 syocy.hatenablog.com Stack 最近は ghcup があるがシェルスクリプト製で自分は PowerShell ユーザーなので stack を使っている。(ghcup はなんで Haskell 製じゃないんだ1?…

関数のメモ化

ブログに書いてみるとよく分からなくなってきました Haskell-jp で回答をもらいました。 @lotz84_ さんの記事や GHC のプロファイルに出てくる CAF がよく分かってなかったのをまとめる。 qiita.com fact のメモ化 lotz さんの記事の階乗 fact 関数を題材に…

技術書典 5 ふりかえり

え?6?いやいや 5 ですよ? techbookfest.org 池袋 慣れ親しんだ秋葉原の地を飛び出して池袋にやってきました。 めちゃくちゃ広くてびっくりです。秋葉原通運会館からアキバスクエアにやってきたときも思いましたが、同じ感想がもう一度。 ガラス張りじゃな…

Servant と Relational Record でウェブアプリケーション開発

Servant とは Servant は型レベルプログラミングによって、ウェブアプリとしてのインターフェースと実装との差異を防ぐことのできるウェブアプリフレームワークです。 haskell-servant.readthedocs.io 日本語記事としては lotz さんのこちらが分かりやすいの…

Haskell Windows Ctrl-C 動作確認

コード コードは前回記事と同じです(再掲)。 Git リポジトリーはこちら。 import Control.Concurrent import Control.Monad import System.Exit import System.IO import System.Win32.Console.CtrlHandler main :: IO () main = do tid <- myThreadId let…

Haskell で Ctrl-C を制御する(Windows)

Ctrl-C 等の割り込みの扱い方です。 tl;dr System.Win32.Console.CtrlHandler を使います。 Ctrl-C が押されたらクロージングの処理を伴って終了するプログラムを書いてみます。 import Control.Concurrent import Control.Monad import System.Exit import …

Windows で Haskell iconv をビルドする

GHC 8.0 以前についてはこちらを参考に。 teratail.com GHC 8.2 以降で stack を使う場合をここではとりあげる。 確信はないのだが、GHC 8.2 から GHC 自体が iconv に依存しなくなったのか、$(stack path --programs)\ghc-8.0.2\mingw\lib から libiconv.a …

『Yesod 入門』商業誌化

同人誌で発売していた『遠回りして学ぶ Yesod 入門』がこのたびインプレス R&D より『Haskell で作る Web アプリケーション 遠回りして学ぶ Yesod 入門』として商業誌化されることになりました。 www.impressrd.jp 同人誌版からの変更点は主に、 日本語が読…

Windows で haskell-ide-engine をビルドする

手順 1. ソースコード取得。 git clone git@github.com:haskell/haskell-ide-engine.git 2. Unicode を扱う ICU の古いバージョンが要るので取得。 自分の使うバージョンの text-icu の changelog を見て、必要な ICU のバージョンを探す。執筆時点では 53 …

技術書典 4 にサークル参加した

4月22日に開催された『技術書典 4』にサークル参加してきました。 techbookfest.org 技術書典は1と2に個人で参加して3は会社として参加して今回の4は会社と個人と2サークルにかかわっていました。 超技術書典を抜くと皆勤です。 個人サークル 既刊として『遠…

なぜ Haskell が好きなのか

自分は Haskell が好きで休日は Haskell を書いています。そういうことを言うと関数型が好きなんですねと言われるのですが、Haskell のよさはそこじゃないと感じているので書き起こそうかと、筆を執りました。 というわけで、この記事は技術的文書というより…

関係と代数的データ型との相互変換についての妄想 その2

思い付き その1 型レベルのリストをクエリー函数に与えてやる。(DataKinds が有効) data Attr = Id | Name | Friends data User = User { id :: Int, name :: String, friends :: [User] } query :: Proxy '[??] -> Key -> MonadDB User userFriends :: Pr…