タグ

Haskellに関するhamamuratakuoのブックマーク (417)

  • Inside the Cult of the Haskell Programmer

    A regular column about programming. Because if/when the machines take over, we should at least speak their language. Haskell. It sounded like a good name for a weapon—a well-sharpened blade, like scimitar or katana. The strong German-sounding plosive in its name, as in Nietzsche or Kafka, added a menacing edge. All I really knew about the language was that it was challenging and intended for math

    Inside the Cult of the Haskell Programmer
    hamamuratakuo
    hamamuratakuo 2024/05/17
    Haskellは宣言型で書くメリットを実感できる。副作用の分離方法を学べば、他の言語にも応用できる。圏論やモナドを知らなくてもHaskellは使える。日本語のHaskell本って説明が分かりづらいのかな?
  • [Haskell] do構文をdoを使わない形に書き換える手順 - Qiita

    do は >>= の構文糖衣です。do構文の中では、<- という記号が使えるので、あたかも代入しているような形でプログラムを書いてゆくことができます。 Haskellプログラミングに少し慣れてくると、do構文を使わなくても書けるようになり、そのほうが簡潔でわかりやすいと思えることもあります(主観)。 do構文で書かれたプログラムをdoを使わない形に書き換える手順をまとめてみました。 この記事で使う、書き換えるための道具一式です。==>の左は右に置き換えられるという意味です。 -- | ---------------------------------------------------- -- | (1) do { m1 } ==> m1 -- | (2) do { m1; m2 } ==> m1 >> do { m2 } -- | (3) do { let s1; m1 s1 } ==>

    [Haskell] do構文をdoを使わない形に書き換える手順 - Qiita
  • Haskellのスペースリークとプロファイリング - 雨粒blog

    目次 プロファイラ 全体的なレポートを採る メモリ消費を詳しく調べる スペースリークなどへの対応 末尾再帰への書き換え 実際のリスト生成の回避 正格評価版$!とseq 正格フィールド BangPatterns StrictとStrictData プロファイラ プログラムをチューニングしたい時は、どの関数のどの部分がどれだけのCPU時間やメモリを消費しているのかがわかると便利なことがある。例えば特定の関数がCPU時間の90%を使っている時に、時間をかけて他の部分をチューニングしても、プログラム全体の実行時間の削減への効果は低い。基的にはCPUやメモリのコストの高い関数から見直していくと良い。 GHCにはプロファイラが付属しているので、CPUの消費時間やメモリの消費量を分析でき、結果をグラフ化することもできる。 7. Profiling — Glasgow Haskell Compiler

    Haskellのスペースリークとプロファイリング - 雨粒blog
  • Haskellを勉強するのに便利なリンク集

    Haskell2010 Language Report語訳 (定番の公式ドキュメントです。) オブジェクト指向言語ーそれは何兆ドル規模の厄災 (オブジェクト指向言語の問題点を学び、「なぜ関数型言語は必要なのか?」という問いに答えてくれます。) 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022 (関数型言語の特徴が丁寧に書かれています。) あどけない話 (山和彦さんのブログです。入門資料がとてもわかりやすく書かれています。) 箱で考えるFunctor、ApplicativeそしてMonad (イラスト付きでモナドをわかりやすく解説しています。) モナドはポケモン数学が出てこないモナド入門 (ポケモンの例えを使ってモナドをわかりやすく解説しています。) 他にもおすすめのサイトなどありましたら、ぜひ教えて下さい!

    Haskellを勉強するのに便利なリンク集
  • Amazon.co.jp: 算数を作って覚えるHaskell: しんちゃん: 本

    Amazon.co.jp: 算数を作って覚えるHaskell: しんちゃん: 本
  • Oath: 安全、高速、合成可能な並行処理 - モナドとわたしとコモナド

    TL;DR github.com 並行処理を簡潔かつ安全に記述できるライブラリを作った。ApplicativeDo拡張を使って、以下のようにoathの引数として与えたIOアクションを同時に実行し、結果を集める処理を書ける。いずれかが例外を投げた場合、残りをキャンセルするためリソースを漏らす心配がない。 evalOath $ do a <- oath $ ... b <- oath $ ... f a b 経緯 Haskellは並行処理が得意とされている。事実、軽量スレッド、MVar、STMといった処理系によるサポートが充実しており、HackageのConcurrencyカテゴリには235ものパッケージがあることからもユーザの関心の高さが窺える。 並行処理を実用する上では、単にスレッドをフォークするだけでなく、計算の結果を集める必要がある──Scalaなどで言うFutureに近いものがあると

    Oath: 安全、高速、合成可能な並行処理 - モナドとわたしとコモナド
  • 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で格的に開発する際は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でちょっとしたスクリプトを書く
  • よわよわエンジニアがTAPL(型システム入門)を読んだら

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

    よわよわエンジニアがTAPL(型システム入門)を読んだら
  • 依存関係と階層構造の軛 - モナドとわたしとコモナド

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

    依存関係と階層構造の軛 - モナドとわたしとコモナド
  • 型システム入門

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

  • 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型推論アルゴリズムについて - 朝日ネット 技術者ブログ
  • 余代数な有限機械のHaskell実装

    概要 この記事は Bart Jacobs による "Introduction to Coalgebra" という大変面白いの一部を Haskell で実装し確認したメモである。余代数や終余代数の概念をHaskell での実装を弾幕としてできるだけさりげなく導入する。またその適用例としてStream と有限オートマトンを構成する。結果として余代数が時間発展の構造(structure)を与えるとき、終余代数はその振る舞い(behaviour)を与えることを見る。また余帰納的(余再帰的)定義ということについても補足する。圏論の語彙は質的な理解には差し替えないと思われる範囲で未定義のまま用いている。 Stream と余代数 Stream 有限オートマトンを扱う前に Stream でウォーミングアップする。Stream とはある型の値の無限個数の列である。いま Pair Functor を次のよ

    余代数な有限機械のHaskell実装
  • Functional programming is finally going mainstream | Hacker News

    My experiences with the encroachment of FP into otherwise imperative or OO languages has mostly been:1. Write a bunch of functional code. 2. Marvel at how clean and neat things are. 3. Get customer reports of performance problems. 4. Spend a lot of time ripping out FP components and replacing them with imperative code. The big mistake is in believing there is any value in this- or that-oriented pr

  • Functional programming is finally going mainstream

    Paul Louth had a great development team at Meddbase, the healthcare software company he founded in 2005. But as the company grew, so did their bug count. That’s expected, up to a point. More code and more features mean more defects. But the defect rate was growing faster than Louth expected. “We were seeing more and more of the same types of bugs,” Louth says. “It was clear that there was an issue

    Functional programming is finally going mainstream
    hamamuratakuo
    hamamuratakuo 2022/07/18
    Functional programming is finally going mainstream | Hacker News https://news.ycombinator.com/item?id=32071346
  • 代数的データ型と初等代数学

    「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには——問われたことがないのでわからないのだが——おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ

    代数的データ型と初等代数学
  • Haskellでの型レベルプログラミング

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

    Haskellでの型レベルプログラミング
    hamamuratakuo
    hamamuratakuo 2022/03/31
    「Haskellでの型レベルプログラミング」 | 雑記帳 https://blog.miz-ar.info/2022/03/writing-type-level-programming-in-haskell/
  • 執筆中:「Haskellでの型レベルプログラミング」 | 雑記帳

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

    hamamuratakuo
    hamamuratakuo 2022/03/31
    通常のプログラミングで型を意識しなければならないように、型レベルプログラミングではカインドの意識が必要になる。
  • 型の理論 入門

    概要プレスルーム著作権お問い合わせクリエイター向け広告掲載開発者向け利用規約プライバシーポリシーとセキュリティYouTube の仕組み新機能を試してみる© 2024 Google LLC

    型の理論 入門
  • 型の理論入門 ( 論理学入門 III ) | MaruLabo

    型の理論入門 概要 「型の理論」には、Russellの 'Ramified Type Theory' から Voevodsky の 'Homotopy Type Theory' までを数えれば、100年以上の歴史があります。 「型の理論」の歴史には、ひとつ大きな特徴があります。 ラッセルの理論が、自ら発見した「集合論の逆理」がもたらした数学の基礎の「危機」を解消しようとする試みとして生まれたことが示すように、「型の理論」は数学をどのように基礎づけるかという問題と結びついて発展してきました。 Churchのラムダ計算もTuringTuring machineの構成も、ゲーデルの不完全性定理がもたらした数学の基礎についての「危機」に対する反省・探究の中で生まれたものです。数学の基礎への関心は、集合論、Topos理論にかわる数学の新しい基礎づけを目指したVeovodskyの"Univalent

    型の理論入門 ( 論理学入門 III ) | MaruLabo