並び順

ブックマーク数

期間指定

  • から
  • まで

321 - 360 件 / 700件

新着順 人気順

haskellの検索結果321 - 360 件 / 700件

  • Go の 構造体定義から Functional Options Pattern のコードを自動生成する CLI ツールを作った

    Go でオプション引数を実現したいときによく Functional Options Pattern が使われるかと思います。このデザインパターンは便利な一方、構造体の中でオプション引数を用意したい全てのフィールドに対して、オプション引数用の関数を実装する必要があり、記述すべきコードが多くなりがちです。 この問題を解決すべく、Functional Options Pattern を実現するためのコードを自動生成する CLI ツール 「foggo」を作りました。 Functional Options Pattern とは Go はそのシンプルな言語仕様から、オプション引数を提供していません。 オプション引数はデフォルト引数やオプションパラメータとも呼ばれ、Python だと可変長引数である *args や *kargs のことを指します。 通常の関数であれば特に問題ないのですが、構造体の初期化

      Go の 構造体定義から Functional Options Pattern のコードを自動生成する CLI ツールを作った
    • 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
      • Elmの歩き方2019

        Elm Meetup in Summer 2019

          Elmの歩き方2019
        • テンソル形状のコンパイル時検査+実行時アサーション化を今のHaskellで書いてみる - Qiita

          はじめに Edward Z. Yang 氏の記事 A compile-time debugger that helps you write tensor shape checks は、テンソルの形状の検査を依存型でコンパイル時に対話的にやりつつ、静的に決まらない部分や静的な検証が難しい部分はアサーションとして実行時検査に遅延するという仕組みの提案。 対話的なアサーションの挿入部分とかはともかく、型付けとアサーションの部分は今のHaskellでも大体出来るなぁと思ったので試しに書いてみた。 (元記事自体Haskellっぽい構文で書かれているし、 Edward Z. Yang 氏自身、ここまでは出来るのは当然知って書いているのだと思うけれど) 結果 元記事での、アサーションを挿入した最終的なプログラムは以下: main() { x = load("tensor1.t") y = load("t

            テンソル形状のコンパイル時検査+実行時アサーション化を今のHaskellで書いてみる - Qiita
          • The golden rule of software quality

            This post summarizes a rule of thumb that I commonly cite in software quality discussions, so that I can link to my own post to save time. I have taken to calling this the “golden rule of software quality” because the rule is succinct and generalizable. The golden rule is: Prefer to push fixes upstream instead of working around problems downstream … and I’ll explain implications of this rule for a

            • Haskellの非実用性 - falsandtruのメモ帳

              IDEなどの開発支援機能を使用できない場合が少なくない .chsファイルへの非対応 実際的な広いユースケースで現代的なプログラミングを実現できておらずインタラクティビティの低い原始的なプログラミングを強いられる ビルドが長すぎる(1時間前後) 脆弱性修正の数分以内の緊急デプロイといったセキュリティ要件を満たさない ダウンタイムがビルド時間に応じて長時間化することで繁忙期などに発生した重大問題が甚大な機会損失および信用失墜に発展するリスクが非常に高い アップデートやデバッグなどにともなう長時間のリビルドによる人員設備等の稼働率低下による損失が大きすぎる 勤怠状況の不明瞭化による勤怠管理の困難化が怠業を誘発し周辺人員への悪影響などの周辺問題の連鎖的発生と拡大につながる構造的問題が生じる レコードフィールド名に非現実的な制約がある 外部スキーマとの互換性の問題が不可避的 ソースコードのエントロピ

                Haskellの非実用性 - falsandtruのメモ帳
              • SML#プロジェクト

                SML#はオープンソースの関数型プログラミング言語です。Standard MLと互換性を保ちながら、C言語やデータベースとの連携など実用上重要な機能を備えています。詳しくは「SML#について」をご覧ください。 val puts = _import "puts" : string -> int fun f x = ignore (puts (#b x)) val _ = f {a = "Hi", b = "Hello"} val _ = f {b = "World", c = "SML#"} 最近のニュース SML#の教科書が出ました 2021年4月15日 「SML#で始める実践MLプログラミング」が発売されました。 もっと読む... GitHubへの移行が完了しました 2021年4月7日 SML#プロジェクトのGitHubへの移行が完了しました。 もっと読む... SML# 4.0.0 リ

                • The Haskell Phrasebook

                  The Haskell Phrasebook is a free quick-start Haskell guide comprised of a sequence of small annotated programs. It provides a cursory overview of selected Haskell features, jumping-off points for further reading, and recommendations to help get you writing programs as soon as possible.

                    The Haskell Phrasebook
                  • #88: A History of Haskell: being lazy with class

                    Haskell の長い歴史を向井が辿ります。感想などはハッシュタグ #misreading か hello@misreading.chat にお寄せください。iTunes のレビューや星も歓迎です。 A History of Haskell: being lazy with class – Microsoft ResearchHaskell LanguageHome — The Glasgow Haskell Compilerhttps://www.haskell.org/onlinereport/haskell2010/Changes since Haskell ’98

                      #88: A History of Haskell: being lazy with class
                    • Haskellでちょっとしたスクリプトを書く

                      Haskellで本格的に開発する際はcabalなりstackなりでプロジェクトを作るわけですが、ファイル一つで済むような(書き捨て)スクリプトをHaskellで書きたい場合があります。 依存関係のないスクリプトであれば、普通にファイルを作ってrunghc/runhaskellすれば良いでしょう。しかし、Haskellには標準ライブラリー(base)以外にも「準標準」と呼べる外部のライブラリーが多数あり(例:bytestring, text, vector)、それらに明示的に依存することはrunghcではできません。 そこで使えるのが、cabal scriptやstack scriptと呼ばれる機能です。歴史的にはstack scriptの方が古く(いつ?)、cabal scriptは2018年ごろに実装された比較的新しい機能です。 RFC: Add support for "#! /usr

                        Haskellでちょっとしたスクリプトを書く
                      • サンクの構造を見る - Qiita

                        GHCでは評価戦略がデフォルトで遅延評価ですが、このために引数に関数を適用しただけでは評価自体は行われずに、サンクとして扱われます(ここではinliningやstrictness-analysis等の最適化は考慮しません)。 サンクとは評価を進めるための情報は揃っているけども(遅延評価のために)評価を進めないままに扱うための構造です。GHCでのサンクの実態は引数のないクロージャです。 そしてこのサンクの中身はHaskell上から確認する手段はありません... と思っていたのですが、最近1は中身を確認することができる様ですね。 http://hackage.haskell.org/package/ghc-heap-view ghc-heap-viewはサンクを含むHeap上の構造を確認するためのライブラリです。 前提条件 ここでは以下の環境で動作確認を行っています。 MacOS ghc-8.

                          サンクの構造を見る - Qiita
                        • Strict拡張を使用する際の注意点 - Haskell-jp

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

                            Strict拡張を使用する際の注意点 - Haskell-jp
                          • ペアノの公理の後者をうっかり2つに増やすと実数になっちゃう説 - Qiita

                            Haskellで下記のデータ型を定義した時にBinat -> Nat型の単射な関数が思いつかず、タイトルの仮説が浮かんだ次第。 なんでそう思ったかの概略 証明する気はないが、なんで実数(とBinat型のすべての値の集合の濃度が同じ)と思ったか、概略を述べておく。 まず、LSuccとRSuccをBizeroに有限回適用して得られる値の集合$B_0$は可算無限集合。 次に、RSuccは有限回、LSuccは可算無限回Bizeroに適用して得られる値の集合$B_1$も可算無限集合。 最後に、LSuccとRSuccをBizeroに可算無限回適用して得られる値の集合を$B_2$として、差集合$B_2 \setminus B_1$を考える。LSuccを0、RSuccを1と読み替えれば、半開区間$(0, 1]$の各実数を二進数の無限小数で一意1に表したものと一対一に対応するので、$B_2 \setminu

                              ペアノの公理の後者をうっかり2つに増やすと実数になっちゃう説 - Qiita
                            • 【これからiOS頑張りたい方向け】2年半iOSアプリ開発をしてハッとした瞬間まとめ - Qiita

                              はじめに iOS Advent Calendar 2020 17日目です。 2年半くらいiOSアプリ開発してきてハッとした瞬間をまとめました。(iOSとかswiftに限った話じゃない学びもあるけど。) がんばらなくても読めるけど、なんとなく勉強にもなる記事を目指しました。 タイトルに近い方が初歩的なやつです。 もし時間あればみていただけると嬉しいです。 お品書き 返り値でBoolを返す時はそのBool自身を返せばいい 三項演算子を使うとif else がワンライナーで書ける var +=は計算型プロパティにできる。 ネストは早期returnで減らせる 2重否定はifでいい。 型が明確な時のinitializerは.initに省略できる trailing closureは引数から省略できる enumとswitchを組み合わせて網羅性をチェックする Bool値が複数ある場合の場合分けはswit

                                【これからiOS頑張りたい方向け】2年半iOSアプリ開発をしてハッとした瞬間まとめ - Qiita
                              • Hacker News folk wisdom on visual programming

                                I’m a fairly frequent Hacker News lurker, especially when I have some other important task that I’m avoiding. I normally head to the Active page (lots of comments, good for procrastination) and pick a nice long discussion thread to browse. So over time I’ve ended up with a good sense of what topics come up a lot. “The Bay Area is too expensive.” “There are too many JavaScript frameworks.” “Bootcam

                                  Hacker News folk wisdom on visual programming
                                • HaskellのCo/Yoneda型と米田の補題をきちんと繋げる - Qiita

                                  概要 Haskell には Co/Yonda 型があり、圏論には米田の補題がある。両者の関連についての分かりやすい解説を見つけられなかったため、ここで米田の補題と Co/Yoneda 型をシームレスに繋ぐことを試みる。 圏論の基礎知識は仮定している。また Co/Yoneda 型は kan-extensions で定義されたものを参照している。 記法 圏論の記法は一般的なものを用いるが、Haskell コードとの比較のし易さのために、圏 $\mathcal C$ における対象 $A$ から対象 $B$ への射の集合 $\mathcal C (A,B)$ を $$ A\underset{\mathcal C}{\rightarrow}B $$ とも書くことにする。 米田の補題によると、圏 $\mathcal C$ とその対象 $A$ ならびに関手 $F:\mathcal C\rightarro

                                    HaskellのCo/Yoneda型と米田の補題をきちんと繋げる - Qiita
                                  • GitHub - eeue56/derw: An Elm-inspired language that transpiles to TypeScript

                                    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 - eeue56/derw: An Elm-inspired language that transpiles to TypeScript
                                    • Unification-free ("keyword") type checking

                                      From my perspective, one of the biggest open problems in implementing programming languages is how to add a type system to the language without significantly complicating the implementation. For example, in my tutorial Fall-from-Grace implementation the type checker logic accounts for over half of the code. In the following lines of code report I’ve highlighted the modules responsible for type-che

                                        Unification-free ("keyword") type checking
                                      • Pure destination-passing style in Linear Haskell

                                        My goal today is to convince you that destination-passing style is neat, actually. And that linear types make destination-passing purely functional. But first, I must answer a question. What is destination-passing style? If you’ve ever programmed in C, C++, or Fortran, you are sure to have encountered the style of programming which sometimes goes by the name destination-passing style. It is the pr

                                          Pure destination-passing style in Linear Haskell
                                        • Haskellのscan系関数を使いこなす | 雑記帳

                                          Haskellはリストを操作する関数を多数提供しています。map, filter, foldあたりが代表的で、これらは他の言語でもおなじみかと思います。 一方で、scan系関数(scanl, scanr)は他の言語ではあまり見かけない気がします。同じ関数型言語のSMLやOCamlにも標準では入っていないようです。 この記事では、scan系関数がどういう場合に利用できるかを紹介します。 scan系関数とは 定義と図解 scan系関数は、リストを元にして新しいリストを構築する関数です。新しいリストの要素は、与えられた初期値と関数を使って元のリストを途中まで畳み込んだものになります。「foldの途中経過を残す版」とでも言えば良いでしょうか。 型はそれぞれ次のようになります: scanl :: (b -> a -> b) -> b -> [a] -> [b] scanr :: (a -> b ->

                                          • 型に関連するよく分からん用語がありすぎる - 技術メモ

                                            Rustのドキュメントを読んだりTwitterで型について話している人が使う用語でわからないものが結構ある。CSを体系的に学ぶ過程でおそらく共通で皆通ってきているのだろうが自分には抜け落ちている。この分野の用語を最低限自分も理解して使えるようになりたい。

                                              型に関連するよく分からん用語がありすぎる - 技術メモ
                                            • Optimizing Ray Tracing in Haskell

                                              My first Haskell program and how easily I optimized it from 33m to 17s. 1800x1012 scene generated containing 533 objects rendered with 500 samples and 50,000 rays per pixel.BackgroundFew weeks back, my colleague at work, Eyal Kalerdon, shared his implementation of ray-tracing-in-one-weekend in Rust, which inspired me to try this as well. I, however, chose Haskell for this, thinking I’ll not only l

                                                Optimizing Ray Tracing in Haskell
                                              • Conduit最速入門2019 - Qiita

                                                メリークリスマス。 アドベントカレンダーの枠が埋まっていないので、ちょっとお邪魔してconduitをやります。 conduitはバージョン1.3系統で大きくAPIが変わっているのですが、日本語による新しい解説が見当たらないので、簡単にチュートリアルをやっていこうと思います。 Conduitは「読み込む→何かする→書き込む→繰り返し」みたいな処理をHaskellで書くためのライブラリ、またはフレームワークです。 本来、純粋なシーケンス相手であれば、こういう処理は得意なはずのHaskellなのですが、読み書きが入って来ると途端に話が複雑になります。 実質的な選択肢は3つ。 普通にdo文で手続き型っぽく書く Lazy IO なんかフレームワークを使う 1は実は最善策という説がありますが、やめておきましょう。2はトイプログラムには良いのですが、実用的にはいろいろ問題がある事が分かっています。 とい

                                                  Conduit最速入門2019 - Qiita
                                                • Lessons in Managing Haskell Memory

                                                  At Channable, we process several billion product data records for our customers every day according to user-customizable rules. Internally, this work is subdivided into jobs, where one job takes a set of products and the rules for how to process them as input, and returns the transformed set of products as output. Those datasets range from a few dozen to tens of millions of products in size. The a

                                                  • 双対的にみる余帰納法 1.イントロ - Qiita

                                                    双対的にみる余帰納法シリーズ 1. イントロ 2. 帰納法と代数 3. 余帰納法と余代数 はじめに 帰納法について圏論的な見方を解説した日本語のWebページはそれなりにあるが, 余帰納法についてはみかけない. しかし, Haskellで使われる無限リストは余帰納的なデータの代表例であり, 余帰納法の解説にはある程度の意味があると信じて本記事を書く. 帰納法は知っているけど, 余帰納法って何? という読者が大半かと思われるので, まず本記事では余帰納法の使い方に焦点を当てて余帰納法への導入を行なう. その後, 余帰納法が帰納法の双対になっていることや, 余帰納的な証明手法であるBisimulationについていくつかの記事に分けて解説する(予定). 事前知識 読者が以下のことを知っていることを前提に以降の記事を書く. 圏論についての基本的なこと 圏や関手, 直積, 直和 帰納法についての知識

                                                      双対的にみる余帰納法 1.イントロ - Qiita
                                                    • Haskell Foundation

                                                      An independent, non-profit organization dedicated to broadening the adoption of Haskell, by supporting its ecosystem of tools, libraries, education, and research. Stackage Handover Completed I’m happy to announce the completion of the handover of Stackage.org to the Haskell Foundation. Thanks to FP Complete’s effort and dedication, Stack and Stackage have been part of the Haskell community for ten

                                                      • 多相からプログラミング言語を見る - 趣味はデバッグ……

                                                        こんにちは。ホビー型システミストの岡本です。 最近 C++ の習得をしていて、なんとなく多相(polymorphism)の視点からいくつかのプログラミング言語をまとめてみようという気になったので書いてみます。 部分型多相(subtype polymorphism) クラスベースオブジェクト指向言語でよく使うのは部分型多相ですかね。 Java や C#・C++ にある、名称的部分型多相(nominal subtype polymorphism)はこんな感じ。次の例は Java です。 class A {} class B extends A {} public class Main { public static void main(string[] args) { A foo = new B(); } } 変数 foo は A 型だけど、型(クラス)B は A の部分型(サブクラス・派生ク

                                                          多相からプログラミング言語を見る - 趣味はデバッグ……
                                                        • The Cubix Framework

                                                          Building a Programming Tool? Build for 5 languages at once -- | Inserts "blocksCovered[n] = true" printouts for test-coverage -- at every basic block -- -- Runs on C, Java, JavaScript, Lua, and Python instrumentTestCoverage :: forall fs l. (CanInstrument fs) => ProgInfo fs -> TermLab fs l -> Annotater (TermLab fs l) instrumentTestCoverage progInfo t = performCfgInsertions @(StatSort fs) progInfo $

                                                          • GHC 9.2の新機能と、GHCの動向2021

                                                            Haskell Day 2021で「GHCの動向2021」というタイトルで発表しました、mod_poppoです。この記事では、発表の補足としてGHC 9.2の新機能の紹介と、 Data.List の単相化に関する補足を行います。 Haskell Day 2021の動画と筆者のスライドは、それぞれ次のリンクから参照できます: Haskell Day 2021 - YouTube GHCの動向2021 「GHCの動向」のタイトル的な元ネタ(?)は、筆者が3月にブログに書いた GHCに初めてコントリビュートした/最近のGHC動向 です。時代遅れになった記述もあると思いますが、よかったら読んでみてください。 GHC 9.2の新機能 2021年10月29日に、待望のGHC 9.2.1がリリースされました。公式の変更点は 2.1. Version 9.2.1 — Glasgow Haskell Com

                                                              GHC 9.2の新機能と、GHCの動向2021
                                                            • GitHub - haskell-jp/makeMistakesToLearnHaskell: Make Mistakes to Learn Haskell - 失敗しながら学ぶHaskell入門

                                                              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.

                                                                GitHub - haskell-jp/makeMistakesToLearnHaskell: Make Mistakes to Learn Haskell - 失敗しながら学ぶHaskell入門
                                                              • Haskellで、手軽にプロパティベーステスト

                                                                はじめに Haskell Advent Calender 2023の2日めの記事です。カレンダーの枠が空いていたので、久しぶりに勢いで書いてみました。 さて、ラムダノート社から「実践プロパティベーステスト」が出版されたので、巷ではプロパティベーステストが流行っていることでしょう (紹介宣伝です)。 Haskellでは、プロパティベーステスト用のライブラリとして、例えばQuickCheckがあります。 この記事では、Haskellではソースコードのコメント中に簡単な記述をするだけで、プロパティベーステストを手軽に実行できることを改めて紹介します。 本格的なコードを開発している局面だけではなく、ちょっと頭の中を整理したい時などにも手軽で便利です。 (前準備) テストケースと期待値によるテスト Haskellでは、ソースコードのコメント中に埋め込まれたテストケースを実行できるdoctestという

                                                                  Haskellで、手軽にプロパティベーステスト
                                                                • コーディングについて思うこと垂れ流し

                                                                  ミライトデザイン Advent Calendar 2021 の 11 日の記事です カレンダーの右端は日曜日派の ほげさん ( zenn ) です Qiita のアドカレの右端は土曜日だったんですね、気を付けましょうね 血圧低い感じで、盛り上がりもオチもなく文字数制限のない Twitter のような駄文を晒します 導入 ある Haskell はいいぞおじさんの誕生のはなし 2014 年くらいだったか、大したきっかけもないけど Haskell を触った[1] 根本的な基礎力が足りなかったしダラダラやってたので、ちゃんと H 本の内容を最後の章まで理解できたのは多分 2016 年くらいだった気がする そのあと Haskell の考え方とコードって超クールだなって思ってこんなのを書いたりした 細かい内容は覚えてないけど、記事の内容はニュアンスとしては こんな ↓ 実装をやめて User find

                                                                    コーディングについて思うこと垂れ流し
                                                                  • Pandocフィルター101 - golden-luckyの日記

                                                                    昨日の記事では、PandocのReaderを自分で作り直す話をしました。 いうまでもありませんが、ReaderはPandocの一部なので、改造Readerを使うためにはPandocをソースから自分でビルドする必要があります。 ところがPandocというのは、Haskellで書かれているうえに、かなり巨大で依存関係がめんどくさいソフトウェアです。 GitHubからソースをcloneしてくれば誰でもビルドできるとはいえ、Haskellの開発経験がまったくないと、ビルドできる環境を整えるだけでもなかなか大変でしょう。 Readerを改造するしか手のうちようがない機能追加や修正については何ともなりませんが、Pandoc構造に押し込まれたコンテンツを他の記法として書き出すときに標準とは違うことをしたいだけなら、Pandocをソースからビルドしなくても済むような裏口が昔から用意されています。 それが今

                                                                      Pandocフィルター101 - golden-luckyの日記
                                                                    • 依存関係と階層構造の軛 - モナドとわたしとコモナド

                                                                      21世紀現在のプログラミング言語において、モジュールという機能はほぼ必要不可欠である。ソースコードを分割し、明示的な依存関係を指定する仕組みであるモジュールは、以下のような様々な恩恵をもたらす。 インクリメンタルビルド: モジュールごとにコンパイル結果を保存し、変更されていない部分を再コンパイルするのを防ぐ。 内部の隠蔽: 実装の詳細を隠蔽し、モジュール外から触れないようにする。プログラムの見通しをよくしたり、不正な操作をする機会を減らす。 アーキテクチャの整理: モジュールは他のモジュールを参照できるが、原則として相互参照はしない。依存の向きを定めることで、適切な抽象化と、 それに基づいた実装の分離を促す。 さて、いくらモジュールが便利と言えど、数が増えすぎるとさすがに扱いにくい*1。そのため、ディレクトリの構造をモジュールの階層構造として運用する仕組みが備わっていることが多い。 コンパ

                                                                        依存関係と階層構造の軛 - モナドとわたしとコモナド
                                                                      • GHC 環境構築 概観 と PowerShell - 趣味はデバッグ……

                                                                        Haskell の開発環境を構築する方法は何通りかあり、新しいツールが出ると「今はこれだ」とほめるブログも公開されますがそれが初学者を混乱させることがよくあります。 本記事ではビルドツールのインストールにしぼり、開発支援、例えば ghc-mod・haskell-ide-engine・hhp には言及しません。 いくつか典型的な構築方法を確認した後、新たに私が作成したツールを紹介しより初学者を混乱に落とし入れます。 重鎮 Haskell Platform www.haskell.org Haskell 解説書史1の第1波から第3波までのデファクトスタンダードであった重鎮 Haskell Platform です。コンパイラー GHC とパッケージマネージャー Cabal、それにいくつかの準標準ライブラリーをまとめてインストールできるツールでこれをインストールするだけで入門書のコードはすぐ動くと

                                                                          GHC 環境構築 概観 と PowerShell - 趣味はデバッグ……
                                                                        • リテラルをコンパイラ時にチェックする

                                                                          Haskell はいくつかのリテラルで型クラスを使用したオーバーロードを許容している.例えば,Haskell で 1 と書いた場合,この型は 1 :: Num a => a になり, Num のインスタンスを定義することで,リテラルに対する実体をユーザも制御できるようになっている.GHC拡張で文字列に対してのオーバーロードなども提供されている.ただ,提供するデータ型とリテラルによっては,プログラムが意図通りに動かなかったりクラッシュしてしまったりすることがある.これを事前にチェックする仕組みを,コンパイラプラグインで実装する方法を紹介する. なお,環境として以下を想定している. Haskell のオーバーロードリテラルHaskell では整数及び浮動小数点数リテラルにおいて,オーバーロードが許容されている.それぞれ, 整数リテラル: Num のインスタンス 浮動小数点数リテラル: Frac

                                                                            リテラルをコンパイラ時にチェックする
                                                                          • Linear Algebra of Types

                                                                            It gives my brain a pleasant thrum to learn new mathematics which mimics the algebra I learned in middle school. Basically this means that the new system has operations with properties that match those of regular numbers as much as possible. Two pretty important operations are addition and multiplication with the properties of distributivity and associativity. Roughly this corresponds to the mathe

                                                                              Linear Algebra of Types
                                                                            • Retrie: Haskell refactoring made easy

                                                                              What’s new: We’ve open-sourced Retrie, a code refactoring tool for Haskell that makes codemodding faster, easier, and safer. Using Retrie, developers can efficiently rewrite large codebases (exceeding 1 million lines), express rewrites as equations in Haskell syntax instead of regular expressions, and avoid large classes of codemodding errors. Retrie’s features include the ability to rewrite expre

                                                                                Retrie: Haskell refactoring made easy
                                                                              • Functors and Monads For People Who Have Read Too Many "Tutorials" - iRi

                                                                                Celebrating Over 10 Years Of Being Too Lazy To Pick A Tagline Title is literally true. This may not be the best place to learn about these concepts for the first time, because I'm going to focus on knocking down the misconceptions about them. Then again, it may not be the worst place, for the same reason. I had promised myself I would not add to the pile of functor or monad "tutorials", but I've b

                                                                                • 文脈依存 PEG による Haskell パーサ

                                                                                  前に PEG パーサジェネレータライブラリ ptera を作っているという話をしたが,今回はその第二弾.ptera で Haskell2010 の文法パーサを例に追加してみたんだが,その過程で色々あったのでその備忘録. 結論から言うと,ptera に前回から以下の拡張を加えた. 先読みを強化し,もうちょっとちゃんと機能するように 文脈依存でパースができるようにした 後は,Template Haskell で文法書けるようにしたりもしたが,まあそれはいいでしょ. Haskell2010 と ptera ptera でひとまず Template Haskell で文法が書けるフロントエンド部分作った後,Haskell 2010 ぐらいパースできないと使い物にならないなあと言う感じで Haskell の example project 書いてみたんだが,ここで色々つまづいてしまった.主に今回説明

                                                                                    文脈依存 PEG による Haskell パーサ