Haskell

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…

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

OR マッパーみたいな、関係*1とデータ型との相互変換が機械的にできたら嬉しいなという話。 シンプルなのは簡単だしすでにできる。例えば次のような関係がある場合*2、 var user base relation { id integer, name string, } key { id }; var friends base r…

技術書典2にサークル参加します 「Haskell Yesod 本」

4月9日日曜日にアキバ・スクエアにて開催される技術書オンリー同人誌即売会「技術書典2」にサークル「趣味はデバッグ……」として参加します。 冬コミで頒布した『遠回りして学ぶ Yesod 入門』の誤字脱字等を修正して組版を改善したものを持っていきます。 新…

Yesod で1ページに複数個フォームがある場合は identifyForm を使う

resolver lts-5.4 で確認。 問題 1ページに複数個フォームがある場合、runFormPost はそれぞれのフォームの区別をしてくれません。どういうことかというと、例えば下記のような2つのフォームを利用するとします。 data AFormData = AFormData Text aForm :: …

Yesod と HDBC-mysql と haskell-relational-record で “Commands out of sync”

Yesod と HDBC-mysql と haskell-relational-record を一緒に使っているのだが、MySQL サーバーに「Commands out of sync; you can’t run this command now」って言われてぐぬぬってなって、最近デバッグをがんばっている。とりあえず途中経過をメモしておく…