タグ

ブックマーク / haskell.jp (55)

  • 文字列型を抽象化するのにはmono-traversableパッケージがいいかも - Haskell-jp

    Tweet この記事はHaskell Advent Calendar 2021の25日目の記事です。 Haskellのよく言われる問題点の一つとして、文字列型が下記のようによく使われるものだけで5種類もある、という点があります: String StrictなText LazyなText StrictなByteString LazyなByteString (上記の頻繁に使われるもの以外にも、もっとあります) それぞれ確かに使いどころが違うので、アプリケーションで使用する場合は場面に応じて使い分ければいいのですが、文字列を使ったライブラリーを開発する場合はなかなか悩ましいものがあります。内部で依存しているライブラリーが使用しているものがあれば、それをそのまま使うのが簡単で確実ですが、そうでない場合も多いでしょう。そこで稿では文字列型を抽象化して扱いたい場合の手段として、mono-traver

    文字列型を抽象化するのにはmono-traversableパッケージがいいかも - Haskell-jp
    igrep
    igrep 2021/12/25
    書きました!
  • Haskellにおける記号の調べ方 - Haskell-jp

    Tweet この記事はググって解決しづらかったこと Advent Calendar 2021の25日目の記事です。Haskell-jp WikiのHaskellの歩き方というページにもほぼ同じことを書きましたが、今回はよい機会なので実例を加えつつ詳しく紹介させてください。 Contents 二項演算子(記号関数)の調べ方 ユーザーが定義した二項演算子ではないものの調べ方 まとめ Link to here二項演算子(記号関数)の調べ方 よく知られているとおり、Haskellには二項演算子をプログラマーがかなり自由に定義できるという、とても変わった特徴があります。他のプログラミング言語でも使う標準的なもの(例: +, *, &&など)を名前空間を絞って置き換えるほか、例えばかのlensパッケージのように、ライブラリーの作者があたかも新しい構文を作り上げるかのごとく独自の二項演算子を提供すること

    Haskellにおける記号の調べ方 - Haskell-jp
    igrep
    igrep 2021/12/25
    今年のAdvent Calendarの記事2本目が書けました。
  • Haskell Day 2021

    日程の詳細はスケジュールをご覧ください。 発表者募集 発表者募集は締め切りました。 Haskell Day 2021 は YouTube プレミア公開を利用してオンラインで開催されます。発表をご希望の方は下記の要項をご確認の上、奮ってご応募ください。 応募資格 誰でも発表者として応募できます。 発表内容 Haskell に関する内容及び Haskell コミュニティが関心のありそうな内容であれば自由です。 参考(過去2回の発表タイトル): Haskell Day 2019 関数型(function type)を見つめるプログラミング HKD (Higher Kinded Datatype) 「しんさんきぼう」GHC の deriving テクノロジー Haskell メタプログラミングによる Egison のパターンマッチの実装 関数と型で理解する自動微分 GHCJS による Web フロ

    Haskell Day 2021
    igrep
    igrep 2021/05/24
    "プログラミング言語 Haskell に関する国内最大級のイベント「Haskell Day 2021」を開催"
  • Writer Monadで気軽にMonad則を破る - Haskell-jp

    Tweet 🎅この記事は、Haskell Advent Calendar 2020 25日目の記事です。 🎄Happy Christmas!!🎄 今回は先日(といっても元の質問の投稿からもう何ヶ月も経ってしまいましたが…)StackOverflowに上がったこちら👇の質問に対する回答の、続きっぽい話を書こうと思います。長いし、質問の回答からスコープが大きく外れてしまうので記事にしました。 haskell - モナド則を崩してしまう例が知りたい - スタック・オーバーフロー MonadとMonoidにある重要な繋がりを説明した後、それを応用したWriter MonadがどうMonoidを使ってMonad則を満たしているのか証明します。そして、Writerのそうした性質を用いて簡単にMonad則を破る例を紹介することで、読者のみなさんがMonad則のみならずdo記法やMonadそのもの

    Writer Monadで気軽にMonad則を破る - Haskell-jp
    igrep
    igrep 2020/12/25
    超時間かかったけど書いた。人生4回目ぐらいのMonad解説記事です。
  • Strict拡張を使用する際の注意点 - Haskell-jp

    Tweet Haskellは他の多くのプログラミング言語と異なった特徴を備えており、しばしばそれらが議論を呼ぶことがあります。その中でも特によく俎上に上がるのが、遅延評価です。遅延評価は、適切に扱えば不要な計算を行わず、計算資源を節約してくれるステキな仕組みですが、一歩使い方を間違うと「サンク」という「これから実行する(かも知れない)計算」を表すオブジェクトが無駄に作られてしまい、却ってメモリー消費量が増えてしまう、などといった問題を抱えています。この現象は「スペースリーク」と呼ばれ、かつて専門のAdvent Calendarが作られたことがあるほど、Haskeller達の関心を集めてきました。 そんなHaskeller達の悩みの種を軽減しようと、GHC 8.0以降、StrictとStrictDataという言語拡張が搭載されました。これらの拡張は、大雑把に言うと、 StrictData:

    Strict拡張を使用する際の注意点 - Haskell-jp
    igrep
    igrep 2020/06/11
    エラい時間がかかってしまいましたが書きました。
  • Haskellを業務で使う、カジュアルに - Haskell-jp

    Link to hereはじめに この記事では、Haskellを業務でカジュアルに使う観点やヒントについて、簡単に紹介します。 Haskellを業務で使える局面は、以下のようにいくつか考えられます。 「プロダクト」の開発用言語として、Haskellを使う 「作業」の支援・加速用に、Haskellを使う 「思考」の支援・加速用に、Haskellを使う つまり、プロダクトの開発用言語としてHaskellを用いない業務形態においても、上記2や3のケースとして、Haskellを使用できます。すなわち、Haskellは幅広い局面でカジュアルに、つまり気軽に手軽に使用できます。 記事では、特に、上記の2と3について、いくつかの観点やヒントや例を紹介します。 なお、上記は、Haskellを用いる場合には限りません。Python, Perl, Ruby, Rust, Scala, OCaml, Cloj

    Haskellを業務で使う、カジュアルに - Haskell-jp
  • IO モナドと副作用 - Haskell-jp

    純粋関数型プログラミングで副作用を扱う方法Posted by Mizunashi Mana on April 05, 2020 Haskell は他のプログラミング言語には見られない特徴を多く持っている。その中の1つが純粋性だ。Haskell は純粋関数型プログラミング言語であることを、売りの1つにしている。しかし、純粋性は多くの場合表現力の縮小を招く。ところが Haskell は、IOモナドの導入により、通常のプログラミング言語と変わらぬ表現力を持てるようになっている。これは、とても驚くべきことだ。しかし、同時にこれは Haskell 入門者にとって、大きな混乱を招いているようだ。 今回は、そもそも純粋性とはなんなのか、なぜ他の言語は純粋性を担保できないのか、そして Haskell はどうやって IO モナドにより純粋性を担保しつつ他の言語と変わらない表現力を持てるようにしているのかにつ

    IO モナドと副作用 - Haskell-jp
    igrep
    igrep 2020/04/05
    エッセンスがきっちりまとまってる。素晴らしい。
  • HspecでQuickCheckするときもshouldBeなどが使えます - Haskell-jp

    Link to here📣shouldBeなどはpropertyの中でも使えるので使ってください! みなさんはHspecでQuickCheckを使ったproperty testを書く際、どのように書いているでしょうか? 例えばHspecのマニュアルのように、Hspecにproperty testを組み込む例として、次のような例を挙げています。 describe "read" $ do it "is inverse to show" $ property $ \x -> (read . show) x == (x :: Int) ※こちらのコミットの時点での話です。 property関数に渡した関数(以下、「porpertyブロック」と呼びます)の中ではHspecでおなじみのshouldBeなどのexpectation用関数を使わず、==で結果を判定してますよね。 このサンプルに倣って、H

    HspecでQuickCheckするときもshouldBeなどが使えます - Haskell-jp
    igrep
    igrep 2020/02/27
    書きました。タイトルとサブタイトルがほぼすべてなんでそこだけ読んだら後読まなくても大丈夫です。
  • リベンジ・オブ・毎時更新 Haskell Antenna - Haskell-jp

    Haskell-jpのコンテンツの一つとしてHaskell AntennaというWebページの開発・運用をしております。 2019年の今頃、これを自動毎時更新しようと Drone Cloudによる毎時更新を設定しました。 しかし。。。なんと去年の3月ぐらいからこれが止まっています(どうやら、Drone Cloudのこの機能を利用してマイニングをした人がいたらしく止めてしまったようです)。 現在は僕がだいたい毎朝1回、手動でCIを回しています。。。 ずっとなんとかしなきゃなぁと思い続けてはや9ヶ月。 やっと重い腰をあげてなんとかしました! というよりは、なんとかする方法を思い付いたので実装してみました。 Link to hereどうするか? GCPにはalways freeプランというのがあり、GCEインスタンスの場合はf1-microであれば一台だけ無料です(2020/1現在)。 これに、

    リベンジ・オブ・毎時更新 Haskell Antenna - Haskell-jp
  • regex-applicative: 内部DSLとしての正規表現(ブログ記事版) - Haskell-jp

    RegexFestaで発表した内容を詳しく紹介しますPosted by YAMAMOTO Yuji(@igrep) on December 30, 2019Tags: 正規表現 先日、といっても2019年10月18日のことなんでもう2ヶ月以上も経ってしまいましたが、私はRegex Festaというイベントで、「regex-applicative」というパッケージの紹介を致しました。 今回はその際使用したスライドを、ブログ記事として詳しく共有させていただきたいと思います! 発表時のスライドと比べて、よりHaskellを知っている人向けになってしまいますが、regex-applicativeの魅力を明確に伝えるために必要なのでご了承ください。 Applicativeスタイルを前提知識とします。 Link to hereはじめにまとめ regex-applicativeは、Haskellの式で正

    regex-applicative: 内部DSLとしての正規表現(ブログ記事版) - Haskell-jp
    igrep
    igrep 2019/12/30
    多分今年最後の記事です。Regex Festaで発表した内容を(今更)記事にしました!
  • 日本語をshowしてうまく表示されなかったら - Haskell-jp

    すると、日語の大半が変な文字列に変わってしまいました😥。 へ… 変な文字列じゃないし!エスケープシーケンスに変換しただけだから! これは、Haskell標準におけるshow関数の残念な仕様です。 show関数に文字列を渡すと、ダブルクォートで囲った上で、ASCII範囲外の文字列や、ASCIIの非表示文字などをエスケープシーケンスに変換して返します。 これは、show関数をデバッグで使用した際、指定した文字列にどんな文字が含まれているか、簡単にわかるようにするための仕様です。 文字の文字コードを表示すれば、NULL文字や制御文字、ゼロ幅文字、特殊なスペースなど、視認しにくいおかしな文字が含まれていても、一目でわかるのです。 しかしこれは日語話者である我々にとって、少なくとも日語の文字に関しては「余計なお世話」です。 NULL文字やASCIIの制御文字といった来画面に表示することがな

    日本語をshowしてうまく表示されなかったら - Haskell-jp
    igrep
    igrep 2019/12/22
    タイプセーフプリキュア!の話はできませんでしたがプリキュア成分はあちこちに散りばめました。
  • Haskell Day 2019を開催しました! - Haskell-jp

    先日2019年11月9日、TECH PLAY SHIBUYAにてHaskell Day 2019を開催しました。 今回は、各発表の概要や、アンケートの結果をお伝えしたいと思います。 Link to here発表 まずは各種発表の紹介から。 Link to here関数型(function type)を見つめるプログラミング 「関数型」 — すなわちHaskellでいうところのa -> bで表される、Haskellの関数について、ちょっと見方を変えた新しい発見を教えてくれました。 資料はこちら Link to hereHKD(Higher Kinded Datatype) Higher Kinded Datatype (HKD)という、昨今Haskell界で流行りの型定義方法を解説しています。 レコード型を定義する際HKDにすることで、より柔軟に扱うことができるようになります。 さらに、ba

    Haskell Day 2019を開催しました! - Haskell-jp
    igrep
    igrep 2019/11/29
    #haskellday 書きました!
  • Haskell Symposium 2019 レポート - Haskell-jp

    Haskell Symposium 2019にIIJとして参加してきました。 聴講した発表についての概要をまとめましたので、どの論文を読んでみるか決めるなどの際にご活用ください。内容については私の聞きまちがい・読みまちがいなどあると思いますのでご了承ください。 Link to hereHaskell Symposiumとは International Conference on Functional Programming(ICFP)に合わせて開催されるHaskellに関する国際会議です。Haskellに関する研究を発表したり、実践的な経験や将来の言語の開発について議論したり、その他の宣言的プログラミングを促進したりします。 Link to hereBidirectional Type Class Instances 著者:Koen Pauwels (KU Leuven), Georgio

    Haskell Symposium 2019 レポート - Haskell-jp
    igrep
    igrep 2019/10/01
    HIWのレポートと併せてご覧ください hask(_ _)eller
  • HIW 2019で発表された、Copilotという内部DSLについて - Haskell-jp

    前回から引き続き、Haskell Implementors’ Workshop 2019への参加レポートとして、私の印象に残った発表を紹介します。 今回は、Copilotという、C言語のコードを生成するHaskell製内部DSLについての発表です。 Link to hereCopilot 3.0: a Haskell runtime verification framework for UAVs 発表者: Frank Dedden Royal Netherlands Aerospace Center, Alwyn Goodloe NASA Langley Research Center, Ivan Perez NIA / NASA Formal Methods Haskell製の内部DSLからC言語のソースコードを生成する、Copilotの紹介です。 似た謳い文句の内部DSLとしてivor

    HIW 2019で発表された、Copilotという内部DSLについて - Haskell-jp
    igrep
    igrep 2019/10/01
    HIW 2019行ってきたレポート最後の記事です。
  • HIW 2019で発表された、Gibbonコンパイラーについて - Haskell-jp

    前回から引き続き、Haskell Implementors’ Workshop 2019への参加レポートとして、私の印象に残った発表を紹介します。 今回は、Gibbonという、GHC以外のHaskell(の、サブセット)の処理系についての発表です。 Link to hereThe Gibbon Compiler: Accelerating a small subset of Haskell 発表者: Ryan R. Newton Indiana University, Michael Vollmer Indiana University, USA, Chaitanya Koparkar Indiana University Gibbonは最適化の手法を研究するために作られたコンパイラーです。 具体的には、我々(特にHaskeller)がよく使う、木構造全体に対する処理の最適化です。 こうし

    HIW 2019で発表された、Gibbonコンパイラーについて - Haskell-jp
    igrep
    igrep 2019/09/28
    書きました。HIW 2019参加レポートその3です。
  • HIW 2019で発表された、GHC 8.10に導入されるであろう機能 - Haskell-jp

    前回から引き続き、Haskell Implementors’ Workshop 2019への参加レポートとして、私の印象に残った発表をいくつか紹介します。 今回は、「GHC 8.10に導入されるであろう機能」です。 いずれも該当するMerge Requestはmasterブランチにマージ済みなので、おそらくGHC 8.10で提供されるでしょう。 Link to hereHoleFitPlugins and the future of interactive development in GHC 発表者: Matthías Páll Gissurarson Chalmers University of Technology, Sweden 該当のMerge Request: !153 該当のGHC Proposal: なし 昨年のHaskell Symposiumでも発表されてGHC 8.6

    HIW 2019で発表された、GHC 8.10に導入されるであろう機能 - Haskell-jp
    igrep
    igrep 2019/09/17
    HIW 2019参加レポート2つめです!
  • HIW 2019で発表された、GHC 8.8で導入された機能 - Haskell-jp

    こんにちは。 今回からいくつか、「Haskell Implementors’ Workshop 2019」に私が先月参加した際のレポートとして、印象深い発表をテーマごとに分けた短い記事を執筆します。 最近公開されたGHC 8.8の話はもちろん、未来のGHCやその他のHaskellの処理系を知るのによいイベントでしたので、その一部だけでも伝われば幸いです。 Link to hereそもそもHaskell Implementors’ Workshop (HIW)とは? シリーズ(?)第1回目なので、簡単にHIWそのものについて紹介しておきましょう。 HIWは、ICFP (International Conference on Functional Programming)という関数型プログラミングについての国際会議に併設された、Haskellの実装者のためのワークショップです。 名前の通り、G

    HIW 2019で発表された、GHC 8.8で導入された機能 - Haskell-jp
    igrep
    igrep 2019/09/11
    HIWについての記事1本目です。短めの記事といいつつ最初からやや長くなった
  • fallibleというパッケージをリリースしました - Haskell-jp

    タイトルの通り、fallibleというパッケージを紹介します。 matsubara0507/fallible: interface for fallible data type like Maybe and Either. - GitHub ちなみに、fallibleはHaskell-jp Slackで: と質問したところ、該当するようなパッケージは無さそうだったので作ったという経緯があります。 その際に助言をくれた fumieval氏のコードをほとんど引用した形になったので、Haskell-jp Blogに紹介記事を載せることにしました(僕は普段、自分のブログに自作したパッケージを書いています)。 import qualified Data.List as L run :: String -> Token -> Bool -> IO () run targetName token ver

    fallibleというパッケージをリリースしました - Haskell-jp
  • strip-ansi-escapeというパッケージをリリースしました - Haskell-jp

    Link to hereなに作ったか strip-ansi-escapeというパッケージです。 今回もメインの処理は100行にも満たないような小さなもので、また用途もニッチです。 具体的には、名前のとおりANSIエスケープコードを文字列から取り除く、ただそれだけです。 使い方も極めてシンプル: ghci> import Data.String.AnsiEscapeCodes.Strip.Text -- 現状Text型向けにしか作っていないため、OverloadedStringsを有効にした方が使いやすい ghci> :set -XOverloadedStrings ghci> import Data.Text -- 出力すると下線付きで "hello" と表示されるANSIエスケープコード付きの文字列 ghci> "\x001B[4mhello\x001B[0m" "\ESC[4mhell

    strip-ansi-escapeというパッケージをリリースしました - Haskell-jp
    igrep
    igrep 2019/07/08
    書きました。
  • AsteriusでHaskellの関数をJSから呼べるようにしてみた(けど失敗)(拡大版) - Haskell-jp

    先日、Emscripten & WebAssembly night !! #7というイベントにて、AsteriusというHaskellをWebAssemblyにコンパイルするツールについて紹介いたしました。 資料はこちら👇です。 AsteriusでHaskellの関数をJSから呼べるようにしてみた(けど失敗) 日は、スライドの英語で書いていた箇所を和訳しつつ、いろいろ捕捉してブログ記事の形で共有します。 Link to here🔍Asteriusとは何か 冒頭でも触れたとおり、AsteriusはHaskellのソースをWebAssemblyにコンパイルするコンパイラーです。 GHCのHEAD(開発中のバージョン)を都度フォークして、現在活発に開発中です。 Template Haskellと、GHC標準におけるIOを行う関数(の大半)を除いた、すべての機能が利用できるようになっています

    AsteriusでHaskellの関数をJSから呼べるようにしてみた(けど失敗)(拡大版) - Haskell-jp
    igrep
    igrep 2019/05/04
    ゴールデンウィーク2本目の記事です。先月勉強会で発表したことをようやく記事にできました。