並び順

ブックマーク数

期間指定

  • から
  • まで

241 - 280 件 / 700件

新着順 人気順

haskellの検索結果241 - 280 件 / 700件

  • HaskellのLinearTypes言語拡張について少し調べた - TSUGULOG

    最近リリースされた GHC 9.0.1 で使えるようになった LinearTypes 言語拡張について気になったので調べた。 LinearTypes言語拡張とは GHC9.0.1から使えるようになった言語拡張で、Linear Typeを導入できる。ただ、上記リリースノートに “a first cut” とある通り、まだ実験的な機能としてリリースされた段階のようだ。 通常のGHCの言語拡張のように とすることで使えるようになる Linear Typeとは そもそもLinear Typeとはどのような概念なのか、簡単に説明すると、「関数の引数がちょうど1度だけ評価される」、という条件を指定できるもののようだ。 理論的な基礎となるLinear type systemsについては前から広く知られていたものの、なかなか実装までは至らず、今回Haskellで晴れて実装までこぎつけたとのことだった。 具

      HaskellのLinearTypes言語拡張について少し調べた - TSUGULOG
    • linear-base makes writing Linear Haskell easy and fun

      We’re announcing linear-base, a standard library for Linear Haskell programs. Our release accompanies the release of GHC 9.0 which supports -XLinearTypes. Linear base has been written by Bhavik Mehta, a former Tweag intern, Arnaud Spiwack, and ourselves. In the spirit of a standard library, linear-base is not a strict replica of base with linearly-typed variants of all the facilities in base. Inst

        linear-base makes writing Linear Haskell easy and fun
      • GHC 9.0.1 released

        The GHC team is very pleased to announce the availability of GHC 9.0.1. Source and binary distributions are available at the usual place. In addition to numerous bug fixes, GHC 9.0.1 will bring a number of new features: A first cut of the new LinearTypes language extension, allowing use of linear function syntax and linear record fields. A new bignum library, ghc-bignum, improving portability and

          GHC 9.0.1 released
        • Haskell に IDE はないのか?──独断と偏見による Haskell の IDE 十年史

          答え: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

            Haskell に IDE はないのか?──独断と偏見による Haskell の IDE 十年史
          • GitHub - lyokha/nginx-haskell-module: A comprehensive web framework aimed at building custom Haskell handlers for the Nginx Web Server

            You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

              GitHub - lyokha/nginx-haskell-module: A comprehensive web framework aimed at building custom Haskell handlers for the Nginx Web Server
            • lambda is not a four letter word - Fuzzing me wrong — How QuickCheck destroyed my favourite theory

              Fuzzing me wrong — How QuickCheck destroyed my favourite theory Introduction Quite a while back I wrote a larger article on the algebraic foundation of software patterns which also covered the MapReduce algorithm. During the research digged out a paper on algebraic properties of distributed big data analytics, which explained that a MapReduce will always work correctly when the intermediate data s

              • Memory Fragmentation: A Deeper Look With ghc-debug

                In a previous post, David explained how he analysed a memory usage issue which turned out to be caused by fragmentation. At the time of writing the exact cause of the fragmentation was unknown and difficult to analyse. The only thing that we could work out was the extent of the problem without formulating a strategy to fix it. In this post we will report on our progress implementing ghc-debug, a t

                • Haskellの最近の乱数生成事情について

                  あらすじ Haskellでの乱数生成ライブラリは長らく群雄割拠の時代が続いていました。 その理由は、公式のrandomパッケージの使い勝手がすこぶる悪かったため、 各々が独自のインターフェースでまともな乱数生成ライブラリを公開していました。 その時代は、random-1.2の登場により終わりを迎えました。 これからはrandomパッケージを使えば基本的に問題ないでしょう。 Before random-1.2 Haskellの公式の乱数生成ライブラリがrandomだったのですが、 このライブラリは System.Randomといういかにも標準的なモジュールを提供している割に使い物になりませんでした。 そのため、 mwc-random tf-random xorshift mersenne-random-pure64 などのライブラリが独自のインターフェースを提供していました。 randomの

                    Haskellの最近の乱数生成事情について
                  • Seeking the reasons for segfaults of a Haskell program - あどけない話

                    My open server of Haskell QUIC on Linux sometimes got segfaults. I saw two types of segfaults. One is a simple segfault by accessing a wrong address: mighty: segmentation fault The other is relating to free(): *** Error in `mighty': corrupted double-linked list: 0x00007fcdf0008f90 *** I guessed that a buffer overrun occurred against a buffer allocated by malloc() and this segfault happened when th

                      Seeking the reasons for segfaults of a Haskell program - あどけない話
                    • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

                      κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

                        プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
                      • Caramel: massively scalable, type-safe applications

                        caramel is a functional language for building type-safe, scalable, and maintainable applications Install Docs Discord Code

                          Caramel: massively scalable, type-safe applications
                        • 麻雀の多面待ちのパターンを全て求めてみた - Qiita

                          (2022/10/12追記) この記事をリメイクしました。そちらでは手牌の画像と待ちの画像も載せています。また、ここで求めたリストよりも多くなっています(洗い出すパターンの定義を変えたため)。 https://zenn.dev/firedial/articles/dce2ad243b3516 (2022/10/15追記) 理論もリメイクしました。用語も一部修正しています(標準形から基本形に変更など)。 https://zenn.dev/firedial/articles/2480e844bf5a44 そのため、当記事は deprecate 的な扱いとします。用語など食い違う場合は上記の記事が正とします。 はじめに このサイトに 7 枚待ちのパターンが全て載っている。 10 枚と 13 枚はどうなるのか求めたくなるのが人間の心理である。 今回は haskell でプログラムを書いた。 htt

                            麻雀の多面待ちのパターンを全て求めてみた - Qiita
                          • 現代のオブジェクト指向の class の割れ窓化と宣言的プログラミング

                            オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだの Hatena の件。基本的には同意。ただちょっと切り口が違うので自分の意見を言っておく。ただ、このテーマで何度か書こうとして失敗していて、今回も成功しているとはいえない。 宣言的プログラミングの時代 現代の主流は「宣言的プログラミング」であると思っている。これはリソースの宣言と、その状態遷移の手続きや振る舞いの付与が中心にある。 宣言型プログラミング - Wikipedia その代表的な例がフロントエンドの React と、バックエンドの k8s で、どちらも時系列に基づいた状態の宣言と、フレームワーク側による状態遷移処理、 Reconcillation(調停) が基礎にある。 フロントエンドとバックエンドという両極端な世界で、この変化が起きたのがこの時代を反映したものであると思う。 例えば、jQuer

                              現代のオブジェクト指向の class の割れ窓化と宣言的プログラミング
                            • オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだのHatena

                              某所でオブジェクト指向についていろいろ書いたのでまとめておく。 問題意識としては初学者がなにかというと「オブジェクト指向できるようになりたい」のようなことを言うけどそこまでの優先順位でがんばるものではないんでは、というところです。 まず前提として、オブジェクト指向は1980-2000年くらいに流行って発達したものの、それ以降は時代にあわせた進歩はしていない20年以上前の技術ってのがあります。 そのころは今だとCPUのキャッシュにも満たないようなメモリをやりくりしてプログラムを書く必要があったので、オブジェクト指向はメモリ上のデータをコピーすることなくうまく使いまわせるようなプログラム技術になっています。 そしてオブジェクト指向にはそこから目だった更新はなく、タイトルに書いたように、カメラがやっとついたくらいのガラケーのような古い技術という感じがします。 オブジェクト指向について、アプリケー

                                オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだのHatena
                              • Infrequent, Pragmatic, Lambda Blog - Maybe Considered Harmful (deleted)

                                … or stories about error information loss Due to the negative reaction to the title (reddit) this has been re-posted as Maybe Overuse, Stories About Error Information Loss.

                                • Permutate parsers, don't validate

                                  “Parse, don’t validate” has been one of my favourite programming articles for some time. The main gist of the article is that, when writing in a type-driven fashion, your snappy slogan should be: Parse, don’t validate. The core difference between parsing and validating can be explained by looking at two very similar functions: parseInt :: String -> Maybe Int parseInt str = Text.Read.readMaybe str

                                  • HaskellでのTDDを楽しくするライブラリ methodを作りました。

                                    はじめに Haskellでテスト駆動開発を行う際、純粋な関数は単体テストを書きやすいですが、 返り値がモナドの関数(この記事ではそのような関数をメソッドと呼びます)にたいして単体テストを書くのは簡単ではありません。 今回、メソッドに対して単体テストを書きやすくなるライブラリ methodを作成しました。 methodとは methodでは a1 -> ... -> an -> m b型の関数のことをメソッドと呼びます。 ここでmはモナドです。(->) rモナドを除く大抵のモナドはサポートしていますが、独自のモナドをメソッドにするにはMethod型クラスを実装する必要があります。 モックの作成 methodでは任意のメソッドのモックをDSLで書くことができます。 import Test.Method import RIO (throwString) f,f' :: Int -> String

                                      HaskellでのTDDを楽しくするライブラリ methodを作りました。
                                    • オブジェクト指向におけるVisitorパターンは、F代数によるμ再帰を Church encoding したもの

                                      某所で オブジェクト指向 (OOP) における Visitorパターン について話されていたので、自分の関数型プログラミングのメモ用に整理してみたいと思います。 (Twitterで書くには少し長すぎたので、こちらに整理) 2021/01/10 EDIT: Church (Boehm–Berarducci) エンコーディングとVistorパターンについての具体的な事例は、こちらの記事が分かりやすいので、ご参照ください。 Haskell for all: The visitor pattern is essentially the same thing as Church encoding 概要 OOP における Visitor パターンは、関数型プログラミング的に言えば、(パターンマッチする)F代数によるμ再帰を Church encoding したもの。 つまり、 を関数適用して、結果 a

                                        オブジェクト指向におけるVisitorパターンは、F代数によるμ再帰を Church encoding したもの
                                      • プログラミングする際に今日も役立ってる文献 - HackMD

                                        # プログラミングする際に今日も役立ってる文献 プログラミングを独学する上で役立つ(役立った)書籍を紹介する流れが 最近ちらほら見受けられて読んでいて非常に楽しいので、 見てるばっかりでなく自分も出

                                          プログラミングする際に今日も役立ってる文献 - HackMD
                                        • SOPを使ってジェネリックにCase Analysis関数を実装する

                                          case analysis関数が何かについては、まず kakkun61氏 の以下の記事を参照してください。 case analysis関数はデータ型毎に定まる関数ですがよくよく見てみるとシンプルなルールで統一的に実装できそうです。 Haskellで同じ名前の関数を使って複数のデータ型を扱えるようにするには、モジュールを分けたり型クラスを利用したり工夫する必要があります。 この記事ではジェネリックプログラミングの考え方に基づき、様々なデータ型に対応した一つのcase analysis関数を実装してみたいと思います。 これから実装するgfold'(generic fold)という関数は以下のような振る舞いをするようになります。 > :t unFun . gfold' @Bool unFun . gfold' @Bool :: Bool -> r -> r -> r > :t unFun . g

                                            SOPを使ってジェネリックにCase Analysis関数を実装する
                                          • プログラミング言語論入門 - riswu’s blog

                                            第0章. なぜ Scala を使うのか? はじめに 本稿は、John C. Mitchell 氏らによる Concepts in Programming Languages を基に自身の見解を交え、私がなぜ Scala を好んで使うのかを論じた記事になります。 プログラミング言語の歴史 本題に入る前に、プログラミング言語の歴史について紹介します。 年代 言語・イノベーション 1950 Fortran and Cobol 1960 Lisp and Algol 1970 Abstract data types (Simula, C, SQL) 1980 Objects (Smalltalk, C++) 1990 Java, JavaScript, Python, Ruby これは、年代ごとに開発された言語およびイノベーションを表にまとめたものになります。ただし、この表には欠けている事柄があり

                                              プログラミング言語論入門 - riswu’s blog
                                            • 独学でプログラミングを勉強した自分がこれは役に立ったなと思っている本 - golden-luckyの日記

                                              今ではプログラミングできないわけではないけど、そういえばプログラミングは完全に独学と言っていい。 いや、大学では数学をやっていたので、FortranとかLispはちょっとやった。 なので「完全に独学」といったら嘘になる。 それでも、いま仕事で使っているコンピューターの知識は、基本的にすべて書籍を通して独学したものだ。 そこで、自分が何の本を読んでプログラミングを実務で使えるくらいにはなれたのか、アフィリエイトと宣伝を込めつつちょっと振り返ってみてもいいかなと思って走り書きしてみる。 テキストフィルターを書きまくるとこから始めるといいと思う プログラミングぜんぜんやったことない人が「プログラミング完全に理解した(ダニング・クルーガー的な意味で)」という実感の端緒を得るまでには、まず「テキストフィルタを書きまくる」のがわりと近道だと信じている。 コンピューターを使うことがインターネットを使うこ

                                                独学でプログラミングを勉強した自分がこれは役に立ったなと思っている本 - golden-luckyの日記
                                              • A First Look at Info Table Profiling

                                                In this post, we are going to use a brand-new (at the time of writing) and still somewhat experimental profiling method in GHC to show how to identify a memory leak and the code causing it. This new profiling method, implemented by Matthew, allows us to map heap closures to source locations. A key feature of this new profiling mode is that it does not require a profiled build (i.e. building with -

                                                • Re: 言語のはなし / jmuk - Message Passing

                                                  話をふられてなんなんだけど、最近あんまりML系の言語を使ってみたりしていないんだよな。最後になにかやったのは、min-camlがwasmを吐けるようにしたことで、あれはOCamlで書いたのだったか(min-camlはセルフホストではなく、OCamlで書かれている)。公開もしていない……自分で書いた部分がかなりmessyで気が滅入る感じになってしまったので放置している。 Haskellの型クラス そういえばポッドキャストで最近、Haskellの歴史の論文を読んだのを紹介した。2カラムで50ページ以上という長大なる論文なので仕方なくかなりの部分を割愛したが、なかでも型クラスの話はほとんど触れずに飛ばしたように思う。ところがあの論文は “being lazy with class” という副題がついてるくらい、なにかと型クラスの話をする論文なのだった。論文著者の気持ちとしては、型クラスこそがHa

                                                    Re: 言語のはなし / jmuk - Message Passing
                                                  • The visitor pattern is essentially the same thing as Church encoding

                                                    The visitor pattern is essentially the same thing as Church encoding This post explains how the visitor pattern is essentially the same thing as Church encoding (or Böhm-Berarducci encoding). This post also explains how you can usefully employ the visitor pattern / Church encoding / Böhm-Berarducci encoding to expand your programming toolbox. Background Church encoding is named after Alonzo Church

                                                    • HaskellでS3にファイルアップロードしてみた | DevelopersIO

                                                      はじめに あけましておめでとうございます。CX事業本部の吉川です。 年末年始連休は全体的にダラダラとした寝正月を過ごしていましたが、ちょっとくらい何かやろうということで自由研究として「Haskell+AWS」に取り組んでみました。 ずっとHaskellに興味があり、すごいH本と『入門Haskellプログラミング』は買ったのですが、すっかり積んでしまっていました。 そんなわけで、勉強しようしようと思いつつ手を出せていなかったのでこの機会にえいやで始めました。 今回は手頃なところでS3へのファイルアップロードを行います。 GitHubリポジトリ まずは完成物から。 stack run でS3バケットに10MBと100MBのダミーファイルをアップロードします。 https://github.com/dyoshikawa/amazonka-s3-playground S3バケットとIAMユーザ作成

                                                        HaskellでS3にファイルアップロードしてみた | DevelopersIO
                                                      • ormolu-action

                                                        へいしゃでは、ソースコードのフォーマッターに Ormolu を利用しています。 インデント時のスペース数すらカスタマイズ不可なので好き嫌いが分かれるところですが、プロジェクト全体のコードを統一しておくとコードレビューの際にも有用なので入れています。 ちなみにスペース幅を4にしたくてフォークされた fourmolu というフォーマッターもあります。現在ではスペース数以外の設定もできるみたいです。 どちらも hls から利用可能なので、興味がある人は試してみると良いと思います。 また、ormolu のフォーマット結果で末尾カンマが気に入らない場合は google/ormolu の gfork ブランチを使ってみると良いかもしれません (フォーマット結果)。fourmolu も Add option for leading commas (and expand test suite) #17 で

                                                        • とほほのHaskell入門 - とほほのWWW入門

                                                          「ハスケル」と呼びます。 数学者・論理学者の Haskell Curry の名前に由来しています。 LISP, ML などの言語の影響を受けています。 関数型プログラミング言語 であり、特に 純粋関数型言語 に分類されます。 金融、セキュリティ、数学・科学解析、構文解析などの分野での利用例があります。 関数型プログラミングに慣れていない人にとっては、多少学習コストが高いようです。 遅延評価 を採用しており、式は記述されていても必要となるまで評価されません。 関数型言語ですが、モナド などを利用することにより、手続き型言語のような記述も可能です。 Haskell 1.0 (1990年)、Haskell 98 (1999年)、Haskell 2010 (2009年) などのバージョンがあります。 コンパイル型言語ですが、スクリプト言語の様にインタプリタで呼び出すこともできます。 処理系は、イン

                                                          • 複雑なアニメーションをプログラムする 〜Reanimate入門〜

                                                            Reanimateはアニメーションを作成するためのライブラリです。 ReanimateはHaskellのライブラリとして実装されているのでプログラムによってアニメーションを記述することができます。ライブラリに実装されている機能も多く、ドキュメントも豊富ですし、オンラインのPlaygroundまで用意されていてかなり完成度の高いライブラリになっています。さらにLaTeXや物理エンジン(Chipmonk 2D), POV-Ray, Blenderなど外部ツールとの連携もサポートされています。アニメーションの各フレームはSVGで書き出されるようになっており、幾何学的な図形やSVGフォントを使った文字などから構成されたアニメーションを作るのが得意です。作ったアニメーションは最終的にMP4, GIF, WebMに出力することができます(中間生成物である各フレームのSVGを取り出すことも可能です)。

                                                              複雑なアニメーションをプログラムする 〜Reanimate入門〜
                                                            • Type level mapを使ったpreload風関連リソースの取り回し。Indexed monad添え

                                                              この記事はHaskell Advent Calendar 202011日目の記事です(遅延)。 大晦日です。いかがお過ごしでしょうか。 Haskellでapi server等を作った際、rdbへの問い合わせでPreload的なことを行う箇所で、Type level mapを使った所、なかなかの使い勝手だったので、共有します。 さらにIndexed Monadを使い、明らかに残念だった箇所を改善します。 preload? 1+N問題を起こさぬよう、事前に関連リソースを問い合わせておくもの。prefetchとかとも。 posts = Post.find(...) # query Post # view for p in posts for t in p.tags # ここで問い合わせるとN回なので、事前に問い合わせていて欲しい render t やること viewが要求するpreloadを定義

                                                                Type level mapを使ったpreload風関連リソースの取り回し。Indexed monad添え
                                                              • おすすめHaskellプロジェクト作成方法(ほぼ)2021年版

                                                                はじめに (あともう少しで)あけましておめでとうございます。 この記事では2020年12月31日時点での私のおすすめの最新のHaskellプロジェクトの作成方法をまとめます。 Haskellの環境構築はstackを使うものとcabalを使うものの2種類があります。 歴史的にはcabalの不便さを改善したのがstackですが、現在はcabalも進化して 不便さは大幅に解消されているため、筆者の好みでcabalによる環境構築をまとめます。 ツールのインストール ghcup ghcupはGHCとcabalとHLSをバージョン管理してくれるインストーラです。 インストールガイド を参考にインストールしてください。 バージョン確認 ghcupをインストールしたら $ ghcup list Tool Version Tags Notes ✗ ghc 7.10.3 base-4.8.2.0 ✗ ghc

                                                                  おすすめHaskellプロジェクト作成方法(ほぼ)2021年版
                                                                • Learn just enough about linear types

                                                                  By Artyom Kazak aka @availablegreen December 25, 2020 🧱 This post is written in Brick — a platform for writing pretty public notes, which I co-founded. If you try it out, I'd love to hear feedback on Twitter or at artyom@brick.do. IntroLinear types are coming to GHC. For a brief moment in time, everyone will feel like they are Haskell beginners again. This is a rare opportunity. After reading thi

                                                                  • 新しいGHC拡張、NoFieldSelectorsについて - モナドとわたしとコモナド

                                                                    今まで不満の多かったHaskellのレコードの扱いを改善するための一歩として、NoFieldSelectorsというGHC拡張の実装を進めている。 動機 Haskellにはレコードを定義するための構文がある。 data User = User { userId :: Int , userName :: Text } こう定義すると、各フィールドごとにuserId :: User -> IntとuserName :: User -> Textというゲッターに相当する関数が生成される。これらの関数は特別な意味合いを持っており、以下のレコード操作の構文にも利用できる。 構築 User { userId = 0, userName = "Zero" } パターンマッチ case foo of User { userId = x, userName = name } -> ... 更新 foo {

                                                                      新しいGHC拡張、NoFieldSelectorsについて - モナドとわたしとコモナド
                                                                    • Haskellのループ処理は flip fix でだいたい書けそう - Qiita

                                                                      Haskellにはfor文もwhile文もありません。 大抵の場合はmap, filter, foldrのような関数を使えば事足りますし、再帰関数を使えばほとんどのループ処理は書けてしまいます。しかし時には今考えているループを実装するために適切な高階関数が思いつかなかったり、計算結果だけが欲しいのに再帰関数をわざわざ定義するのが煩わしくなったりする状況もあるでしょう。 "グラフからコミュニティ構造を抽出する 〜リッチフローによるグラフの時間発展〜"を書いた時にいくつかループ処理を実装する必要があって、その度に再帰関数を定義するのが大変だったので flip fix を使いました。そして思ったより flip fix の使い勝手が良かったので、この記事ではこれにスポットライトを当てて紹介したいと思います。

                                                                        Haskellのループ処理は flip fix でだいたい書けそう - Qiita
                                                                      • Monad Transformers and Effects with Backpack

                                                                        A good few years ago Edward Yang gifted us an implementation of Backpack - a way for us to essentially abstract modules over other modules, allowing us to write code independently of implementation. A big benefit of doing this is that it opens up new avenues for program optimization. When we provide concrete instantiations of signatures, GHC compiles it as if that were the original code we wrote,

                                                                        • 関数型プログラミングの復活 - QCon Plusハイライト

                                                                          Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

                                                                            関数型プログラミングの復活 - QCon Plusハイライト
                                                                          • 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
                                                                            • Try.do for recoverable errors in Haskell

                                                                              UPDATE 2021-01-02: I have since written a GHC compiler plugin to implement an alternative ?-based syntax for early return. I prefer that one than use of Try.do, because it doesn’t require any type magic or special instances, and the ? is more readable. UPDATE: I’ve added a follow-up post to this here, where I address some criticisms of this post. The first half of this post is here. Please read th

                                                                              • グラフからコミュニティ構造を抽出する 〜リッチフローによるグラフの時間発展〜

                                                                                コミュニティ抽出とは簡単に言えばグラフにおけるノードのクラスタリング手法です。具体的なアルゴリズムとしてはGirvan–Newman法をはじめ様々なアルゴリズムが存在しますが、この記事では去年(2019年)提案された新しい手法について解説したいと思います[1]。 [1907.03993] Community Detection on Networks with Ricci Flow 話の元になっているのはこちらの論文で、グラフをリッチフローによって変形し、伸びたエッジを切断していくことでクラスタを求めるというアルゴリズムです。リッチフローという聞き慣れない言葉が出てきましたが、ちゃんと後で説明するので気にせず進めましょう。 まずは実際にグラフのクラスタリングを行う様子をアニメーションで見てみてください。 アルゴリズム自体はそれほど難しくありませんが、背景を含めて理解するためには2つの理論

                                                                                  グラフからコミュニティ構造を抽出する 〜リッチフローによるグラフの時間発展〜
                                                                                • 閉半環を使ってグラフ上の最短距離を計算する!

                                                                                  この記事は Haskell Advent Calendar 2020 21日目の記事です。 以前の記事でトロピカル行列を使ったグラフの最短経路の求め方を解説しました。 ここではトロピカルな隣接行列の累乗を収束するまで繰り返すという方法で最短経路を計算しましたが、実は閉半環という代数を考えると直接的に最短経路を求める計算が可能になります。そこで今回はその方法について解説したいと思います。 以前はHaskellのリスト [a] をベクトルとして行列を実装しましたが、今回はそれだと実装が少し煩雑になるので型レベル自然数を型引数に持つ Vector n a を中心に実装していきたいと思います。この話は以下の Functional Pearl が元になっていますが、この論文もリストを使って実装されているので Vector n a を使ってどのように実装できるかはこの記事で新しく試したところです。 ト

                                                                                    閉半環を使ってグラフ上の最短距離を計算する!