タグ

haskellに関するyu_dotnet2004のブックマーク (26)

  • RecordDotSyntaxのあれこれ

  • GHCに初めてコントリビュートした/最近のGHC動向 | 雑記帳

    事実上の標準デファクトスタンダードなHaskell処理系であるGHCに貢献するというのが去年掲げた目標だったが、それがようやく実現したので報告する。ついでに、最近のGHC開発状況についても簡単にまとめてみる。 「貢献」と言っても色々あって、バグ報告とかも立派な貢献なのだが、ここで目標としていたのは「書いたコードをGHC体に取り込んでもらう」ことである。 一つ目:fromInteger :: Integer -> {Float,Double} 年末に書いた記事 Haskell/GHCでの浮動小数点数の扱い – Qiita にあるように、現行のGHCのfromIntegerは値の大きさによって丸め方法が違っている。それによってどういう問題が引き起こされるかというと、 import Numeric import Data.Word main = do putStrLn $ "literal :

  • 6. レコード構文と多相型とカインドと :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、前回は Haskell のリストや再帰処理などを見てきました。 今回はこれまで見てきたデータ型について軽く復習した上で、より詳細について見ていきます。 直積と直和 直積データ 直和データ 直積と直和の組み合わせ レコード構文 type / newtype データ型の宣言の意味 多相型 カインド Swift との用語比較 まとめ あとがき 直積と直和 Haskell では直積と直和のデータを扱えるのでした。 Swift では直積については構造体、直和については enum を使用して定義できますが、 Haskell ではどちらも data キーワードを使って定義します。 また値を取り出す際、Swift では直積についてはプロパティ、直和については switch (など)によるパターンマッチを使用しますが、Haskell では常にパターンマッチを使用してデータを取り出します。 直積データ

    6. レコード構文と多相型とカインドと :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/03/17
    続きを書きました。
  • 5. リストと再帰 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、前回は Swift の配列における典型的な操作(filter / map / reduce)について、Haskell の場合にどのように書けるのか見てきました。 今回は、リストの正体と再帰について見ていきます。 前回の訂正 リストの実体 リストを定義する Haskell のリストの実体 再帰的な関数 リストの再帰処理 リストのパターンマッチ 再帰的な型・関数が重要な理由 再帰的な考え方に慣れる length filter 練習問題 まとめ あとがき 前回の訂正 前回の記事で 1 add 2 という書き方を「セクション記法」と説明していましたが、 正しくは (+1) のように演算子を部分適用する書き方が「セクション記法」でした。(記事は修正済みです) blog.penginmura.tech リストの実体 さて、リストは配列と同じように、同じ型の連続した値を持つことができるデータ構造で

    5. リストと再帰 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/03/08
    続きを書きました。
  • 4. リストと演算子と関数合成 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、前回は Haskell におけるデータ型の宣言やパターンマッチについて見てきました。 今回は Swift でよくある配列操作について、Haskell の場合にどのような書き方になるのか見ていきます。 リスト 関数と演算子 関数を演算子として使用する セクション記法(演算子の部分適用) 演算子 $ 関数合成 リスト処理を関数合成で書き直す どうやって読んだらいいの? まとめ あとがき リスト Swift で同じ型が繰り返すデータ構造として配列(Array)が用意されています。数値の配列から偶数のみを抜き取り、それを2倍して、それらの合計を計算するコードは、みんな大好きな filter 、map 、reduce を使って以下のように書けます。 let isOdd: (Int) -> Bool = { $0 % 2 == 0 } // 偶数か判定する関数 let xs: [Int] = [

    4. リストと演算子と関数合成 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/03/05
    続きを書きました。
  • Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }

    最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「すごいすごい」と言っているFreeモナドなので、流石にいつもまでも全然知らないのはマズイんじゃないかなぁとか思って、重い腰を持ち上げ調べながらこの記事を書き始めたワケですよ。はい。*1 けっこう急ぎで勉強して書き上げたので随所に間違いあるかもです。ツッコミお待ちしてます。 さて、この「Freeモナド」について、オレオレ定義で簡単に言葉にすると。「Functorと組み合わせて様々な挙動を実現できるモナド」です。 大抵「Monadのインスタンス」というと、MaybeにしてもIOにしても、わりと具体的な事象を扱ってますが、このFreeモ

    Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }
  • 3. データ型の基本 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、前回は関数の書き方やカリー化・部分適用などについて見てきました。 今回はデータ型の基について見ていきたいと思います。 データ型の定義 直積型の定義 直和型の定義 関連値を持つ直和型 値の生成 値の生成 再帰的? パターンマッチ case-of スマートな書き方 どう読んだらいいの? まとめ あとがき データ型の定義 Swift では、直積型を構造体、直和型を enum で表現できます。データ構造という観点から見ると、この2つの概念があれば基的にどんなデータでも表現できるでしょう。 Haskell では data キーワードで、直積型および直和型を定義できます。 直積型の定義 以下は Swift で 文字列 と数値 を組み合わた Person 型を定義したものです。 struct Person { let name: String let age: Int } Haskell では

    3. データ型の基本 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/03/01
    続きを書きました。
  • 2. 関数の基本 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、前回で Haskell の開発環境を構築できたので編に入っていきたいと思います。 プログラミング言語の入門記事としては、基データ型などから入るのがセオリーですが、そうした話題は大切ではあるものの同時に退屈でもあります。プログラマとしてある程度経験を積んでいれば、そうしたものはコードを読めば大体判断できますし、必要になってからあらためて理解すれば十分でしょう。 そのようなわけで、あえて関数から説明に入ってみたいと思います。 関数の基 関数シグネチャの宣言 関数適用 where / let - in where vs let-in レイアウトルール ローカル関数 型注釈 if 式 ガード カリー化・部分適用 まとめ あとがき 関数の基 Swift で足し算をする関数のコードは次のように書けます。 func add(x: Int, y: Int) -> Int { return x

    2. 関数の基本 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/02/26
    書きました。
  • 1. 環境構築 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    さて、この記事では VSCode と stack を利用した Haskell の開発環境の構築を行っていきます。この環境構築を飛ばしても、次回以降の記事を読むのに支障はありませんが、コードを実行・評価できる環境が整っていると学習が捗るのでおすすめです。 概要 Stack のインストール VSCode拡張:Haskell のインストール implicit-hie のインストール / hie.yaml の自動生成 JetBrains Mono フォント(任意) おすすめの学習方法 REPL の活用 テストコードの活用 REPL の基と設定 ヘルプ 代表的なコマンド 複数行の入力 プロンプト表示のカスタマイズ おわりに VSCode トラブルシューティング 補完やホバーが動かない なんかコード全体がエラー扱いに・・・ あとがき 概要 インストールする対象は以下のとおりです。 Stack VSC

    1. 環境構築 :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/02/26
    書きました。
  • 0. Introduction :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog

    Haskell は Swift に影響を与えたプログラミング言語として知られています。Swift に影響を与えたとされるプログラミング言語は他にも Objective-C、RustRubyPython、C# など多数に及びますが、プログラミングパラダイムに最も影響を与えているのは Haskell でないかと私は感じています。 この連載記事は、Swift と比較しながら Haskell を学んでいく記事です。 0. Introduction 1. 環境構築 2. 関数の基 3. データ型の基 4. リストと演算子と関数合成 5. リストと再帰 6. レコード構文と多相型とカインドと -- About this articles? readThisArticles :: SwiftProgrammer s => s -> HaskellerBeginner readThisArticl

    0. Introduction :: Swift プログラマのための Haskell 入門 - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2021/02/26
    連載記事を書き始めました。
  • Haskell で doctest(unittest)と QuickCheck(Property-based Testing) - ペンギン村 Tech Blog

    どうも、年末年始に飲むワインはバッチリ買い揃えた @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

    Haskell で doctest(unittest)と QuickCheck(Property-based Testing) - ペンギン村 Tech Blog
    yu_dotnet2004
    yu_dotnet2004 2018/12/31
    備忘録がてら書きました。
  • 本気で Haskell したい人向けの Stack チュートリアル - Qiita

    この記事は定期的にメンテナンス(加筆・修正)されています。 記事のコードは 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 プロジェクトの作り

    本気で Haskell したい人向けの Stack チュートリアル - Qiita
  • モナドを理解する - 迷える者への手引き

    いずれにせよ、システムの状態が時間の関数であり、そのため時間は考慮しなければならない余分な要素となります。"xの値は何?"と問い合わせることは実際できません。代わりに、"時間tにおけるxの値は何?"と問い合わせなければなりません。これではコードを判断するのが難しくなり、複雑な要素が増えます。結論としては... 状態あり: ダメ! 状態なし: グッド! 式とアクション 式とは値を持った文です。たとえば以下のコードを考えてみましょう。 x = 5 y = x + 7 x = y + 1 最初のxは値が5であるという式です。最後のxは値が13であるという式です。コードは他の式も含んでいます。たとえば真ん中の行は、x + 7が12という値であるという式です。 ほとんどのコンピュータ言語では、キーボードから読み込むコマンドは式であり、その式は値を持っています。次の文を考えてみましょう。 x = ne

    モナドを理解する - 迷える者への手引き
    yu_dotnet2004
    yu_dotnet2004 2018/01/13
    IOアクションに限って言えば、Promiseみたいなものだというメタファが分かりやすいような気もする。でも、それは本質的な説明にはならないか。
  • A Tour of Go in Haskell

    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 ユーザでない人の分かりやすさのために、意図的にユーティリティ関

    A Tour of Go in Haskell
  • Property Based Testing - scalapropsとscalacheckとその他色々

    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

  • Haskellは真面目なアプリケーション開発に向いている - syocy’s diary

    qiita.com ↑の記事で(主題ではないと思うものの)Haskellの批判に結構な分量が割かれていて、その批判のなかに「ちょっと違うんじゃないかな」という点がいくつかあったので反論ぽいことを書きます。 "Haskell は真面目なアプリケーション開発には向いてない"について これには多分いくつか事例を挙げればよくて、 Facebook ではスパム等の攻撃と戦うためのシステムを Haskell で作っています。 Fighting spam with Haskell | Engineering Blog | Facebook Code | Facebook (この記事を書いている Simon Marlow 氏は Haskell および GHC の主要開発者) より「アプリケーション」な事例が必要なら、プレゼンツールの Prezi を挙げることができます。 Case Study - Hask

    Haskellは真面目なアプリケーション開発に向いている - syocy’s diary
  • 教えて! キラキラお兄さん「クソみたいな社会は変えられますか?」

    教えて! キラキラお兄さん「クソみたいな社会は変えられますか?」:プロエンジニアインタビュー(4)(1/4 ページ) 「Haskell」を業務アプリ開発にフル活用する岡和也さんは、「UZUZ」のCTOを務めると同時にソフトウェア開発会社「ARoW」を経営し、さらにフリーランスエンジニアとしても活動する。Haskellにこだわる理由、“複業”エンジニアとして活動する理由を聞いた。 岡和也さんは、既卒、第2新卒向け転職支援サービスを提供する「UZUZ(ウズウズ)」の最高技術責任者(CTO)だ。それなのに「月に2日程度しか出社しない」という自由な働き方で仕事に取り組んでいる。 UZUZのCTO職を務めるのと同時に、ソフトウェア開発会社の「ARoW(アロー)」を経営し、さらにフリーランスエンジニアとしても活動する。得意技として駆使するプログラミング言語は「Haskell」だ。純粋関数型言語とし

    教えて! キラキラお兄さん「クソみたいな社会は変えられますか?」
  • 型クラスはインターフェースとどう違うのか | POSTD

    (注:2017/02/27、いただいたフィードバックを元に翻訳を修正いたしました。) Haskellの型クラスは、Haskellを学び始めたばかりの多くの人にとっては難しい概念です。たいていの言語はこれを表すことが全くできませんし、それに近い概念も持っていません。多くのオブジェクト指向型の言語にとっては、利用可能なものの中では Interface が最も近い言語要素でしょう。Rubyの modules は似たような役割を持っています。しかし、この概念は両方とも、名前の多重定義と一種のポリモーフィズムをアドレスするので、型クラスが提供するパワーの一部を欠いています。 この記事は、型クラスに興味を持っている人向けです。Haskellや関数型プログラミングの予備知識は必要ありません。JavaやC言語のような静的な型付き言語に慣れていれば、役に立つでしょう。 型クラスについての概要/要約 型クラス

  • Eta Programming Language - Haskell on the JVM

    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.

  • New JVM language stands apart from Scala, Clojure