Haskellでの型レベルプログラミングの解説書です。
先日リリースされたGHC 9.2.1で、64ビットArm(AArch64)向けのネイティブコード生成器(Native Code Generator; NCG)が実装された。これを機会にGHCのバックエンドについて簡単にまとめてみる。 概略 GHCでHaskellプログラムをコンパイルすると、いくつかの中間言語を経て最終的には機械語が出力される。 この工程の最後の部分を「バックエンド」と呼ぶ。 GHCには Native Code Generator (-fasm)LLVM backend (-fllvm)unregisterised via-C backend の3種類のバックエンドが存在する。このほか、バイトコードインタープリターと-fno-codeもデータ型的にはバックエンドの一種として扱われている。(参照:compiler/GHC/Driver/Backend.hs) Native C
Haskellは勉強したけどモナドを本当に理解したって言えるのか自信がない… \そんな人向けの試験問題を作りました!/ これから実施する試験問題を、10問中8問正解すればあなたはHaskellのモナドを完全に理解しています。私が保証します! それではさっそく〜〜 第一問 まずは緊張をほぐしましょう。 Haskellの Monad は○○○○である ○○○○に当てはまるのは以下の選択肢のうちどれでしょう? 型 関数 型クラス 型シノニム 答え
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける! 第1章関数プログラミングは難しくない!―初めて学ぶ人にも、挫折した人にもきちんとわかる マルチコア環境が身近になった影響からか、勉強熱心なプログラマの間で関数型言語が話題になっているようです。関数型言語が奨励する関数プログラミングでは、これまで命令型言語で習得した、命令プログラミングの再代入を使う技法があまり通用しません。そのため、「関数型言語は難しい」と言って途中で投げ出してしまう人も多いようです。 この特集では、関数プログラミングの習得を一度諦めてしまった人や、これから始める人のために、関数プログラミングのポイントをできるだけわかりやすく説明します。 筆者がわかるようになるまで 実は筆者も長い間、関数プログラミングを習得できませんでした。筆者は、長年Emacs Lispを使って、Mewというメールリーダーを開発して
答え:Haskell に IDE はずっとある、今ならHLS使え(内容を読む気がないようという人向けの答え) はじめに 2021年2月現在、Haskell の IDE 環境は Haskell Language Server (HLS) の登場により劇的な進化を遂げていますが、日本の Haskell コミュニティではその前身の Haskell IDE Engine (HIE) の情報がまだ氾濫しており、十分な周知に至っていない現状があります。 本稿では、こうした現状を打破すべく、2021 年 2 月現在の Haskell の IDE 環境を取り巻く現状と、そこに至るまでの歴史を完全に独断と偏見で紹介します。より多くの人に HLS の存在を周知し、皆さんの Haskell Life の一助となれば幸いです。また、HLS の前身である HIE は必ずしも快適に動作するとは言い難かったため、HLS
Reanimateはアニメーションを作成するためのライブラリです。 ReanimateはHaskellのライブラリとして実装されているのでプログラムによってアニメーションを記述することができます。ライブラリに実装されている機能も多く、ドキュメントも豊富ですし、オンラインのPlaygroundまで用意されていてかなり完成度の高いライブラリになっています。さらにLaTeXや物理エンジン(Chipmonk 2D), POV-Ray, Blenderなど外部ツールとの連携もサポートされています。アニメーションの各フレームはSVGで書き出されるようになっており、幾何学的な図形やSVGフォントを使った文字などから構成されたアニメーションを作るのが得意です。作ったアニメーションは最終的にMP4, GIF, WebMに出力することができます(中間生成物である各フレームのSVGを取り出すことも可能です)。
Real World HaskellA lot of people think day-to-day tasks like running a web app are difficult or impossible in Haskell! But of course this isn't true! In our Real World Haskell series, we'll take you through a whole slew of libraries that allow you to write a web backend. These libraries use Haskell's features to approach things like database queries and API building in unique ways. Part 1: Databa
初心者が入門書を読んでさぁ書くぞとなったときにつまずくところのうちの一つが,同じようなライブラリが多すぎ問題である. ということでそういうライブラリの話をしよう. 例によって例のごとく間違っていること書いてあるかもなので報告よろしく. モナド変換子 Haskellで実用的なプログラムを書く上で避けて通れないものの一つにモナド変換子がある.こいつはなにかというと,簡単に言えば,モナドを合成してでかいモナドを作るやつである.人間がおおよそ使うであろうモナド変換子はライブラリで提供しているので,それらを組み合わせてお望みのモナドを作ろうとするわけだが,そこに立ちはだかるのがtransformersとmtlである. transformersとmtl transformersはlift という下位のモナドのアクションをでかいモナドのアクションに持ち上げてくれるメソッドが定義されたMonadTrans
日本語圏におけるHaskellの解説本には、これまで4回の波がありました。 それを思い出しながら、最後に『プログラミングHaskell 第2版』の紹介をします。 第1波 第2波 第3波 第4波 『プログラミングHaskell』が改訂されます 第2版ではプログラミングにおける型の理解が深まると思う ここで買えます 第1波 Haskell解説本の1つめの波は、2006年、『入門Haskell』と『ふつうのHaskell』が出版された頃にありました。 このうち、『入門Haskell』は(おそらく)日本初のHaskell本です。 『入門Haskell』(2006年) 『ふつうのHaskell』(2006年) 『ふつうのHaskell』は、書名だけを見ると「特殊な言語」であるHaskellを「ふつう」に説明している本であるように思えるのですが、実はそうでもなくて、淡々と部品の説明をしていく感じの内容
仮説:モナドとはポケモンである このテキストは、でんこうせっかの速さでモナドが使えるようになりたいひとのための、真面目なモナド入門です。数学っぽい話はなるべく避けていますし、関数型言語についての知識がなくても読めるように書いています。対象の読者は以下のような人です。 モナドが何なのか知りたい、使いたい Haskellを学ぼうとしたがモナドがわからなくて挫折した モナドを学ぼうとしたら、箱だのブリートだのと変な喩え話をされて余計わからなくなった プログラミングを学ぶつもりが数学の講義が始まったので止めた 最初はモナドは難しいからとGHCiを使わされたが、電卓程度にしかならないので飽きた なお、何故か説明の補助としてポケモンが登場しますが、この記事を読むのに別にポケモンをプレイしたことがある必要はありません。この記事はもしポケモン要素を全部無視したとしてもわかるようになっています。 挿絵があっ
2018年11月10日、Haskell-jpが主催するイベント「Haskell Day 2018」が開催されました。純粋関数型プログラミング言語Haskellをテーマに、Haskellに興味のある人から入門者、ちょっとできる人まで、様々な層に向けたプレゼンテーションを行った本イベント。実務から研究まで、幅広いHaskellの事例を共有します。プレゼンテーション「Semigroupとは? Monoid? 環?」に登壇したのは、aiya000氏。講演資料はこちら Semigroupとは? Monoid? 環? aiya000氏(以下、aiya000):あいやと申します。今日は「Semigroupとは? Monoid? 環?」というテーマで代数についての発表をします。よろしくお願いします。 (会場拍手) 推しVimはNeovimです。活動はTwitterやGitHubなどをやっています。このスラ
概要 Haskellといえばモナドです。 自分がHaskellでモナドについて勉強してわかったことを、 理解を深めるために整理しつつ書いていきたいと思います。 他の解説では、Maybeモナドなど例から学ぶパターンが多いですが ここではまず簡単に理論から入っていきます。 前提 Haskellの基本(関数、高階関数、部分適用などなど)について特別書いたりはしません。 0. モナドとは一体...? 名前からは実態が掴みづらい「モナド」ですが、それほど難しいものではありません。 モナドとは箱のようなものです。 値を包んだものがモナドです。 MyMonad というモナドを作ってみます。 data MyMonad a = MyMonad a MyMonad "Hello!" :: MyMonad String MyMonad 3 :: MyMonad Int MyMonad True :: MyMon
Introduction About this tutorial So what's Haskell? What you need to dive in Starting Out Ready, set, go! Baby's first functions An intro to lists Texas ranges I'm a list comprehension Tuples Types and Typeclasses Believe the type Type variables Typeclasses 101 Syntax in Functions Pattern matching Guards, guards! Where!? Let it be Case expressions Recursion Hello recursion! Maximum awesome A few m
glossはとても簡単にグラフィックを描画できるHaskellのライブラリです。この記事はgloss入門ということで関数・型・型クラスなどのHaskellの基本的な文法は理解した人向けにglossの使い方を丁寧に書いていきたいと思います。 環境構築 プロジェクトの管理はstackを使って進めていきます。stackを知らない/まだ使っていない人は以下の記事を参考にstackを使える環境を構築してください。 Stackを使ったHaskellのインストール Stackでやる最速Haskell Hello world! (GHCのインストール付き!) Haskell Stack とは何をするツールなのか stackコマンドが使えるようになったら早速プロジェクトを作りましょう。
仰々しいタイトルになってしまいましたが、内容はこんな便利な学習モデルの書き方が出来るよって紹介です。A Purely Functional Typed Approach to Trainable Models (Part 1)で語られているコードをベースにして説明していきたいと思っています。 この記事で紹介する内容は新しい機械学習の理論でもなければ明日から役に立つデータサイエンティストの知識でもありません。線形回帰やニューラルネットワークといった既存の学習理論を表題にもあるような微分可能プログラミング(Differentiable Programming)と純粋関数型言語を使って統一的に記述してみようというものです。こういった抽象化は理論に対する理解を深め、時に新しい構造の発見につながるでしょう。 本編に入る前に微分可能プログラミングという概念について簡単に触れておきます。 まず可微分プロ
型って「どういうことをしてほしいか」っていう 要件 の役割を持ってて、 一方で実装って「どうやってその要件を実現するか」っていう 具体的な手順 の役割を持ってますよね。 ところで仕事ができる人って、「こういうことやりたいな〜って思ってるんだけど〜」って伝えると、 「あ、それなら具体的にこういうやり方をすると良さそうですね〜」って自分で考えて提案して実行してくれてめちゃくちゃ助かるじゃないですか。 そしたら、プログラムの世界でも同じで、要件 (型) だけ書いたら 具体的な手順 (実装) を自動で導出してくれる未来が来たら嬉しい感じがしませんか? ざんね〜ん! 未来ではなくそれは現代のお話でした〜! 1 type MyApi = "books" :> Get '[JSON] [Book] -- GET /books :<|> "books" :> ReqBody Book :> Post '[
Haskellのデファクトスタンダードな処理系であるGHCには,Haskellの言語仕様を補うような形で,GHC拡張と呼ばれる言語拡張を用意している.これらはちょっとした便利な糖衣構文を用意するようなものから型システムに深刻な影響を及ぼすもの,次期仕様策定までの前準備のものまで様々ある.いくつかの拡張はデフォルトで有効になっている. 言語拡張は,次の3つの方法で制御できる. すべての言語オプションは,コマンドラインフラグ-X ...(たとえば,-XTemplateHaskell)でオンになり、フラグ -XNo ...でオフになる.(たとえば,-XNoTemplateHaskell) GHCによって認識されている言語オプションは,LANGUAGEプラグマ(たとえば,{-# LANGUAGE TemplateHaskell #-})を使用して有効にすることもできる. stack (hpack)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く