事実上の標準デファクトスタンダードなHaskell処理系であるGHCに貢献するというのが去年掲げた目標だったが、それがようやく実現したので報告する。ついでに、最近のGHC開発状況についても簡単にまとめてみる。 「貢献」と言っても色々あって、バグ報告とかも立派な貢献なのだが、ここで目標としていたのは「書いたコードをGHC本体に取り込んでもらう」ことである。 一つ目:fromInteger :: Integer -> {Float,Double} 年末に書いた記事 Haskell/GHCでの浮動小数点数の扱い – Qiita にあるように、現行のGHCのfromIntegerは値の大きさによって丸め方法が違っている。それによってどういう問題が引き起こされるかというと、 import Numeric import Data.Word main = do putStrLn $ "literal :
さて、前回は Haskell のリストや再帰処理などを見てきました。 今回はこれまで見てきたデータ型について軽く復習した上で、より詳細について見ていきます。 直積と直和 直積データ 直和データ 直積と直和の組み合わせ レコード構文 type / newtype データ型の宣言の意味 多相型 カインド Swift との用語比較 まとめ あとがき 直積と直和 Haskell では直積と直和のデータを扱えるのでした。 Swift では直積については構造体、直和については enum を使用して定義できますが、 Haskell ではどちらも data キーワードを使って定義します。 また値を取り出す際、Swift では直積についてはプロパティ、直和については switch (など)によるパターンマッチを使用しますが、Haskell では常にパターンマッチを使用してデータを取り出します。 直積データ
さて、前回は Swift の配列における典型的な操作(filter / map / reduce)について、Haskell の場合にどのように書けるのか見てきました。 今回は、リストの正体と再帰について見ていきます。 前回の訂正 リストの実体 リストを定義する Haskell のリストの実体 再帰的な関数 リストの再帰処理 リストのパターンマッチ 再帰的な型・関数が重要な理由 再帰的な考え方に慣れる length filter 練習問題 まとめ あとがき 前回の訂正 前回の記事で 1 add 2 という書き方を「セクション記法」と説明していましたが、 正しくは (+1) のように演算子を部分適用する書き方が「セクション記法」でした。(記事は修正済みです) blog.penginmura.tech リストの実体 さて、リストは配列と同じように、同じ型の連続した値を持つことができるデータ構造で
さて、前回は Haskell におけるデータ型の宣言やパターンマッチについて見てきました。 今回は Swift でよくある配列操作について、Haskell の場合にどのような書き方になるのか見ていきます。 リスト 関数と演算子 関数を演算子として使用する セクション記法(演算子の部分適用) 演算子 $ 関数合成 リスト処理を関数合成で書き直す どうやって読んだらいいの? まとめ あとがき リスト Swift で同じ型が繰り返すデータ構造として配列(Array)が用意されています。数値の配列から偶数のみを抜き取り、それを2倍して、それらの合計を計算するコードは、みんな大好きな filter 、map 、reduce を使って以下のように書けます。 let isOdd: (Int) -> Bool = { $0 % 2 == 0 } // 偶数か判定する関数 let xs: [Int] = [
最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「すごいすごい」と言っているFreeモナドなので、流石にいつもまでも全然知らないのはマズイんじゃないかなぁとか思って、重い腰を持ち上げ調べながらこの記事を書き始めたワケですよ。はい。*1 けっこう急ぎで勉強して書き上げたので随所に間違いあるかもです。ツッコミお待ちしてます。 さて、この「Freeモナド」について、オレオレ定義で簡単に言葉にすると。「Functorと組み合わせて様々な挙動を実現できるモナド」です。 大抵「Monadのインスタンス」というと、MaybeにしてもIOにしても、わりと具体的な事象を扱ってますが、このFreeモ
さて、前回は関数の書き方やカリー化・部分適用などについて見てきました。 今回はデータ型の基本について見ていきたいと思います。 データ型の定義 直積型の定義 直和型の定義 関連値を持つ直和型 値の生成 値の生成 再帰的? パターンマッチ case-of スマートな書き方 どう読んだらいいの? まとめ あとがき データ型の定義 Swift では、直積型を構造体、直和型を enum で表現できます。データ構造という観点から見ると、この2つの概念があれば基本的にどんなデータでも表現できるでしょう。 Haskell では data キーワードで、直積型および直和型を定義できます。 直積型の定義 以下は Swift で 文字列 と数値 を組み合わた Person 型を定義したものです。 struct Person { let name: String let age: Int } Haskell では
さて、前回で Haskell の開発環境を構築できたので本編に入っていきたいと思います。 プログラミング言語の入門記事としては、基本データ型などから入るのがセオリーですが、そうした話題は大切ではあるものの同時に退屈でもあります。プログラマとしてある程度経験を積んでいれば、そうしたものはコードを読めば大体判断できますし、必要になってからあらためて理解すれば十分でしょう。 そのようなわけで、あえて関数から説明に入ってみたいと思います。 関数の基本 関数シグネチャの宣言 関数適用 where / let - in where vs let-in レイアウトルール ローカル関数 型注釈 if 式 ガード カリー化・部分適用 まとめ あとがき 関数の基本 Swift で足し算をする関数のコードは次のように書けます。 func add(x: Int, y: Int) -> Int { return x
さて、この記事では VSCode と stack を利用した Haskell の開発環境の構築を行っていきます。この環境構築を飛ばしても、次回以降の記事を読むのに支障はありませんが、コードを実行・評価できる環境が整っていると学習が捗るのでおすすめです。 概要 Stack のインストール VSCode拡張:Haskell のインストール implicit-hie のインストール / hie.yaml の自動生成 JetBrains Mono フォント(任意) おすすめの学習方法 REPL の活用 テストコードの活用 REPL の基本と設定 ヘルプ 代表的なコマンド 複数行の入力 プロンプト表示のカスタマイズ おわりに VSCode トラブルシューティング 補完やホバーが動かない なんかコード全体がエラー扱いに・・・ あとがき 概要 インストールする対象は以下のとおりです。 Stack VSC
Haskell は Swift に影響を与えたプログラミング言語として知られています。Swift に影響を与えたとされるプログラミング言語は他にも Objective-C、Rust、Ruby、Python、C# など多数に及びますが、プログラミングパラダイムに最も影響を与えているのは Haskell でないかと私は感じています。 この連載記事は、Swift と比較しながら Haskell を学んでいく記事です。 0. Introduction 1. 環境構築 2. 関数の基本 3. データ型の基本 4. リストと演算子と関数合成 5. リストと再帰 6. レコード構文と多相型とカインドと -- About this articles? readThisArticles :: SwiftProgrammer s => s -> HaskellerBeginner readThisArticl
どうも、年末年始に飲むワインはバッチリ買い揃えた @tobi462 です。 なんだか、ひょんなことからすごく久しぶりに Haskell を書いたのですが、そもそも doctest のインストール方法とかもすぐに分からなかったのでメモも兼ねて。 Tl;Dr -- | 文字がすべて異なるか判定する。 -- -- >>> isUnique "" -- True -- >>> isUnique "a" -- True -- ... -- -- ユニークな文字列は、ソート・グループした文字数の長さと、元の文字列の長さが一致する -- prop> isUnique s == ((length $ group $ sort s) == length s) -- isUnique :: String -> Bool isUnique [] = True isUnique [x] = True isUniq
この記事は定期的にメンテナンス(加筆・修正)されています。 本記事のコードは waddlaw/Qiita-stack に置いてあります。 Haskell の開発方法については以下のサイトに色々とまとめていますので、こちらもご参照ください。 Haskell Development TODO: profiling, default-extension, ghc-option, package.yaml と stack.yaml の関係, について追記する。 本記事では Pearls of Functional Algorithm Design (訳本: 関数プログラミング 珠玉のアルゴリズムデザイン) の第1章を題材として stack を使った Haskell プロジェクトの基本を解説しています。 プログラムの内容を理解できなくても、記事を最後まで読むことで Haskell プロジェクトの作り
いずれにせよ、システムの状態が時間の関数であり、そのため時間は考慮しなければならない余分な要素となります。"xの値は何?"と問い合わせることは実際できません。代わりに、"時間tにおけるxの値は何?"と問い合わせなければなりません。これではコードを判断するのが難しくなり、複雑な要素が増えます。結論としては... 状態あり: ダメ! 状態なし: グッド! 式とアクション 式とは値を持った文です。たとえば以下のコードを考えてみましょう。 x = 5 y = x + 7 x = y + 1 最初のxは値が5であるという式です。最後のxは値が13であるという式です。コードは他の式も含んでいます。たとえば真ん中の行は、x + 7が12という値であるという式です。 ほとんどのコンピュータ言語では、キーボードから読み込むコマンドは式であり、その式は値を持っています。次の文を考えてみましょう。 x = ne
A Tour of Go in Haskell へようこそA Tour of Go in Haskell へようこそ。 このサイトは、Go の有名なチュートリアル A Tour of Go の 並行性 の章を Haskell でやってみるというものです。 Haskell は Go と同じく 軽量スレッド や チャネル といった並行処理の機能を持っています。 そのため Haskell で Go と同じ処理を記述して2つを見比べてみるのは興味深いことでしょう。 ここから始めましょう。 Haskellに詳しい方へ: このサイトでは Go との対比を分かりやすくするため、もっぱら async, stm などのパッケージを使って IO の中で明示的に並行性を扱います。 Evalモナド、Parモナドなどは扱いません。 また、Haskell ユーザでない人の分かりやすさのために、意図的にユーティリティ関
class: center, middle # Property Based Testing scalapropsとscalacheckとその他色々 [![クリエイティブ・コモンズ・ライセンス](https://i.creativecommons.org/l/by/2.1/jp/88x31.png)](https://creativecommons.org/licenses/by/2.1/jp/) --- class: middle <img src="image/xuwei.gif" alt="アイコン" width="100" height="100" /> - twitter [@xuwei_k](https://twitter.com/xuwei_k) - github [@xuwei-k](https://github.com/xuwei-k) - blog <https://x
qiita.com ↑の記事で(主題ではないと思うものの)Haskellの批判に結構な分量が割かれていて、その批判のなかに「ちょっと違うんじゃないかな」という点がいくつかあったので反論ぽいことを書きます。 "Haskell は真面目なアプリケーション開発には向いてない"について これには多分いくつか事例を挙げればよくて、 Facebook ではスパム等の攻撃と戦うためのシステムを Haskell で作っています。 Fighting spam with Haskell | Engineering Blog | Facebook Code | Facebook (この記事を書いている Simon Marlow 氏は Haskell および GHC の主要開発者) より「アプリケーション」な事例が必要なら、プレゼンツールの Prezi を挙げることができます。 Case Study - Hask
教えて! キラキラお兄さん「クソみたいな社会は変えられますか?」:プロエンジニアインタビュー(4)(1/4 ページ) 「Haskell」を業務アプリ開発にフル活用する岡本和也さんは、「UZUZ」のCTOを務めると同時にソフトウェア開発会社「ARoW」を経営し、さらにフリーランスエンジニアとしても活動する。Haskellにこだわる理由、“複業”エンジニアとして活動する理由を聞いた。 岡本和也さんは、既卒、第2新卒向け転職支援サービスを提供する「UZUZ(ウズウズ)」の最高技術責任者(CTO)だ。それなのに「月に2日程度しか出社しない」という自由な働き方で仕事に取り組んでいる。 UZUZのCTO職を務めるのと同時に、ソフトウェア開発会社の「ARoW(アロー)」を経営し、さらにフリーランスエンジニアとしても活動する。得意技として駆使するプログラミング言語は「Haskell」だ。純粋関数型言語とし
(注:2017/02/27、いただいたフィードバックを元に翻訳を修正いたしました。) Haskellの型クラスは、Haskellを学び始めたばかりの多くの人にとっては難しい概念です。たいていの言語はこれを表すことが全くできませんし、それに近い概念も持っていません。多くのオブジェクト指向型の言語にとっては、利用可能なものの中では Interface が最も近い言語要素でしょう。Rubyの modules は似たような役割を持っています。しかし、この概念は両方とも、名前の多重定義と一種のポリモーフィズムをアドレスするので、型クラスが提供するパワーの一部を欠いています。 この記事は、型クラスに興味を持っている人向けです。Haskellや関数型プログラミングの予備知識は必要ありません。JavaやC言語のような静的な型付き言語に慣れていれば、役に立つでしょう。 型クラスについての概要/要約 型クラス
What is Eta? Eta is a pure, lazy, strongly typed functional programming language on the JVM. It brings two big ecosystems, the JVM and Haskell, together. This allows you to harness the best of both ecosystems to build your applications quickly and effectively. Eta's concurrency support helps you to build highly scalable systems.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く