並び順

ブックマーク数

期間指定

  • から
  • まで

201 - 240 件 / 638件

新着順 人気順

haskellの検索結果201 - 240 件 / 638件

  • テンソルを実装するのに表現可能関手がとても便利な件 - Qiita

    最近hmatrixで深層学習を実装する機会があったのですが、hmatrixはベクトルと行列しか提供していないので3階以上のテンソルが必要になって困るという場面に出くわしました。そこで自分で長さ付きベクトルを組み合わせてサクッとn階テンソルが作れると便利かな〜と調べていたら(素直にrepaやmassivを使えという話ではあるのですが )表現可能関手を使うことでn階テンソルとその演算が楽に(そして抽象的に)実装できるという文献1を見つけたので備忘録も兼ねてまとめておこうと思います。 この記事で紹介したコードは以下のGistで公開しています。 https://gist.github.com/lotz84/78474ac9ee307d50376e025093316d0f 関手、つまりFunctorのことですが、表現可能関手はその中でも特別な性質を持つものです。この記事は前半と後半に分けて、前半では

      テンソルを実装するのに表現可能関手がとても便利な件 - Qiita
    • Knuth–Morris–Pratt illustrated | Journal of Functional Programming | Cambridge Core

      We use cookies to distinguish you from other users and to provide you with a better experience on our websites. Close this message to accept cookies or find out how to manage your cookie settings.

        Knuth–Morris–Pratt illustrated | Journal of Functional Programming | Cambridge Core
      • Haskellでグラフアルゴリズムを攻略する(WIP)

        はじめに Haskellでは、ListやTreeがよく取り上げられる一方で、グラフの話題はあまり出てこないことがあります。これは、ListやTreeには適切な始代数があり、それに応じたコンストラクタ(パターンマッチング)がうまく機能するためです。しかし、グラフ構造でも実はmatch関数を使ったパターンマッチングで、驚くほど簡潔に各種のアルゴリズムを実装できます。 グラフの基本構造 まず、グラフの基本構造を以下に示します。 import Data.List import Data.IntMap.Strict (IntMap) import qualified Data.IntMap.Strict as IM type Gr a b = IntMap (a, IntMap b) type Node = Int type LNode a = (Node, a) type Edge = (Node

          Haskellでグラフアルゴリズムを攻略する(WIP)
        • Table of Contents · Crafting Interpreters

          ❧Frontmatter Dedication Acknowledgements I.Welcome 1.Introduction Design Note: What’s in a Name? 2.A Map of the Territory 3.The Lox Language Design Note: Expressions and Statements II.A Tree-Walk Interpreter 4.Scanning Design Note: Implicit Semicolons 5.Representing Code 6.Parsing Expressions Design Note: Logic Versus History 7.Evaluating Expressions Design Note: Static and Dynamic Typing 8.Statem

          • 2023年の Linear Haskell で純粋・並列 FFT を実装する──「Haskell は Rust になれるのか?」補遺

            この記事は Haskell Advent Calendar 2023 14 日目の記事です[1]。 更新履歴 2023-12-15 並列化のパフォーマンスに関する追記。 2023-12-14 初版公開。 はじめに 先々月、Linear Haskell のまとまりのない記事を書いたところ、思ったよりも反響を頂いてびっくりしました。 ただかなりまとまりのない長文だった結果、「長い」「結局 Rust になれるのかようわからん」といった御叱りを頂きました。本当にすいません……。 冒頭に「RustのようになるにはLinear Constraintsに期待」とか、末尾に「2023年のHaskellはまだ Rust ではないが、近い将来 Rust になれる可能性が大きい」とか書きはしましたが、全体があまりにも長いのでこの結論を見つけ出すのも大変ですし、話題があんまり散漫に過ぎまたので論拠もすごくわかりづ

              2023年の Linear Haskell で純粋・並列 FFT を実装する──「Haskell は Rust になれるのか?」補遺
            • モナドオリンピック1-トラック競技-

              はじめに 最速のモナドを決めるモナドオリンピックを開催することになりました。 この大会では、各ライブラリの提供するモナドたちが 様々な競技(ベンチマーク)に挑戦します。 競技説明 今回は副作用のないシンプルなベンチマークで計算速度を測ります。 ベンチマーク おなじみのfibをつかいます。普通のfibは返り値が整数型ですが、次の理由から偶奇を表すブール値にしています。 Int型にするとReaderモナドやIdentityモナドで返り値がUnboxingされて有利になりすぎる。 Integer型にすると演算にかかる時間が無視できない xor :: Bool -> Bool -> Bool xor True x = not x xor False x = x fib :: Monad m => Int -> m Bool fib = go where go n | n <= 1 = pure $

                モナドオリンピック1-トラック競技-
              • 関数を組み合わせてシステムを組む「Haskell」。クセの強さがその魅力?〜エンジニアが語る技術愛 #01〜|ミクシル

                ミクシィには、探究心溢れるエンジニアがたくさん在籍しています。 その探究心は業務で扱う技術にとどまらず、趣味で書いているプログラムだったり、個人的に研究している言語だったりと、自身の気になった技術への追求も留まることを知りません。 そこで、社内のエンジニアに“好きな技術”について、思う存分に語ってもらうシリーズを始めました。 ルールはこの通り。 ・業務で使っている技術でも、使われていない技術でもOK ・あくまでも個人的な見解で ・その技術のどこが面白いのか ・愛を込めて語り尽くしてもらう 第1回目は、「モンスターストライク(以下モンスト)」のサーバーエンジニアの松原に、関数型プログラミング言語「Haskell」についていったい何が面白いのか、どういうものなのか、好きなだけ語ってもらいました。 有名プログラミング言語のナレッジが通用しづらい独特な「Haskell」 ━━今日は好きな技術につい

                  関数を組み合わせてシステムを組む「Haskell」。クセの強さがその魅力?〜エンジニアが語る技術愛 #01〜|ミクシル
                • GitHub - luke-clifton/shh: Simple shell like scripting from 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. Dismiss alert

                    GitHub - luke-clifton/shh: Simple shell like scripting from Haskell
                  • おじいさん、今日のご飯はCatamorphismですよ - Qiita

                    100年ぶりにポエムを書きます。 F代数から出発して、最終的にはCatamorphismを理解することを目指します。 F代数 ある関手Fに対して、対象と射の組 $(A, a : F(A) \rightarrow A)$ のこと。

                      おじいさん、今日のご飯はCatamorphismですよ - Qiita
                    • GitHub - tfausak/rampart: :european_castle: Determine how intervals relate to each other.

                      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 - tfausak/rampart: :european_castle: Determine how intervals relate to each other.
                      • 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
                        • scrapscript

                          greet <| person::ron 3 . greet : person -> text = | #cowboy -> "howdy" | #ron n -> "hi " ++ text/repeat n "a" ++ "ron" | #parent #m -> "hey mom" | #parent #f -> "greetings father" | #friend n -> "yo" |> list/repeat n |> string/join " " | #stranger "felicia" -> "bye" | #stranger name -> "hello " ++ name . person : #cowboy #ron int #parent (#m #f) #friend int #stranger text "hi aaaron" Scrapscript i

                          • Blazing fast Fibonacci numbers using Monoids

                            This post illustrates a nifty application of Haskell’s standard library to solve a numeric problem. The Fibonacci series is a well-known sequence of numbers defined by the following rules: In fact, that’s not only a specification of the Fibonacci numbers: that’s also valid Haskell code (with a few gratuitous parentheses to resemble traditional mathematical notation). However, that solution is inef

                            • Elixir版?①「プログラミングHaskell第2版」 - Qiita

                              fukuoka.ex/kokura.exのpiacereです ご覧いただいて、ありがとうございます 先日9/7(土)に開催した、「ElixirConf JP 2019」の準備・運営にかかりきりで、約3ヶ月弱ぶりの投稿です(ElixirConf JP 2019のレビューは追ってまとめます) さて最近、Haskellerの方々と、ご一緒することが、ちょくちょくあります ご存知の方は、ご存知ですが、元々、私の関数型初体験は、Haskellでした … それから幾つものプログラミング言語を経由して、現在、Elixirに落ち着いており、恐らく、Elixir以外の言語を選ぶことは、よほどのことが無い限り、無いと思います とはいえ、言語ヲタとして、他言語に学ぶことは多くあり、今回は、先月出たばかりの「プログラミングHaskell 第2版」の第1章を、Elixirで解釈してみようと思います(コラムは、原著の

                                Elixir版?①「プログラミングHaskell第2版」 - Qiita
                              • 代数的データ型と初等代数学

                                「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,Rust や Swift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには——問われたことがないのでわからないのだが——おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ

                                  代数的データ型と初等代数学
                                • Android むけ Haskell コンパイラをリリースしました!

                                  4 年まえに「Haskell コンパイラを書こう!」 という記事で紹介した自作コンパイラを、いよいよリリースしますというお話です。 その記事で述べた通り、Haskell 2010 仕様を満たし、かつ、FFI をサポートしたら Version 1 にしようと思っているのですが、まだそこまで至っていないため、 今回は 0.9.0 版としてリリースします。 Bunny は、Android 上で動くアプリケーションの作成をターゲットとした Haskell コンパイラです。このコンパイラを作成するにあたって、基礎的な部分を「最新コンパイラ構成技法」という本で勉強したので、 その本の通称である Tiger Book にちなんで Bunny という名前にしました。 Bunny は、Haskell で書かれた Haskell コンパイラです。Haskell プログラムをソースコードとし、オブジェクトコード

                                  • IHP is a modern batteries-included Web Framework, built on top of Haskell and Nix.

                                    The Haskell Framework for Non-Haskellers. Blazing fast, secure, easy to refactor and the best developer experience with everything you need - from prototype to production.

                                      IHP is a modern batteries-included Web Framework, built on top of Haskell and Nix.
                                    • The Hamler Programming Language

                                      Haskell-style functional programming language running on Erlang VM. View the Project on GitHub hamler-lang/hamler The Hamler Programming Language Hamler is a strongly-typed language with compile-time typechecking and built-in support for concurrency and distribution. Hamler empowers industries to build the next generation of scalable, reliable, realtime applications, especially for 5G, IoT and edg

                                      • Ante

                                        For exploring algebraic effects, safe shared mutability, and other novel features Ante is currently in active development and the compiler is in a very early state. In addition, the features listed on this website detail the language itself rather than the subset that is implemented by the current compiler. If you are interested to see which features are implemented, please look at the github page

                                        • Defunctionalization and Freyd’s Theorem

                                          Defunctionalization and Freyd’s Theorem Posted by Bartosz Milewski under Category Theory, Programming [9] Comments The main idea of functional programming is to treat functions like any other data types. In particular, we want to be able to pass functions as arguments to other functions, return them as values, and store them in data structures. But what kind of data type is a function? It’s a type

                                            Defunctionalization and Freyd’s Theorem
                                          • JavaScript backend merged into GHC | IOG Engineering

                                            A new JavaScript backend was merged into GHC on November 30th, 2022! This means that the next release of GHC will be able to emit code that runs in web browsers without requiring any extra tools, enabling Haskell for both front-end and back-end web applications. In this post, we, the GHC DevX team at IOG, describe the challenges we faced bringing GHCJS to GHC, how we overcame those challenges, and

                                            • Haskell+LLVM構成で作る自作コンパイラ - Qiita

                                              Haskellのパーサコンビネータmegaparsecと、コンパイラ基盤であるLLVMを使って、コンパイラを作ってみます。モチベーションとしてはコンパイラはC/C++を使って作るのが定番ですが、型の恩恵を受けながら開発したいなあということでHaskellでも作れないか調べてみました。 コンパイラ作成の流れ パーサコンビネータのMegaparsecで四則演算のパーサを作成します。 LLVM IR構築のライブラリであるllvm-hs-pureでLLVM IRのコードへ変換するコンパイラを作成します。 簡単な式をコンパイルしてLLVMのインタープリタlliで実行します。 LLVMのコンパイラllcでアセンブラを生成してgccでバイナリまで生成します。 環境 あらかじめ以下をインストールしておいてください。 stack 1.9.3 Haskell 8.6.5 LLVM 9.0.0 コマンドラインで

                                                Haskell+LLVM構成で作る自作コンパイラ - Qiita
                                              • Higher-Kinded Data (HKD) について - Qiita

                                                これは Haskell Advent Calendar 12 日目の記事です。今日は 12/12+12 日です。 今回は、最近流行りの Higher-Kinded Data (HKD) について簡単に紹介したいと思います。 // 以前、某社の採用ビアバッシュ的イベントで、Haskell ほとんど知らない人の中で HKD の話をした際のスライドを公開し忘れていたので、せっかくなので多少手直しして公開します。 Haskell Day 2019 でも、@fumieval さんによる HKD のトークがあったので、そちらも参考にすると良いと思います。 https://twitter.com/fumieval/status/1193016480574500865 設定はモノイド Haskell 界隈には設定はモノイドであるべきという一派があります。 次のようなプログラムの設定を表すデータ型を例にして

                                                  Higher-Kinded Data (HKD) について - Qiita
                                                • Micro C, Part 0: Introduction – Joseph Morag

                                                  In this series, we will explore how to write a compiler for a small subset of C to LLVM in Haskell. Our language, Micro C, is basically a small subset of real C. We'll have basic numeric types, a real bool type, pointers, and structs. At the end of the series, we'll have a beautiful executable, mcc (Micro C Compiler), that takes one .mc source file and produces an executable. Why another LLVM tuto

                                                  • Deep Learning From The First Principles | Bogdan Penkovsky, PhD

                                                    Breaking news! Artificial intelligence is taking over the world. Or it is not? Here is what you need to know about a deeper concept of meta-learning. Meta-learning is learning about learning. Learning how to learn belongs here too. Ever wondered how machines defeated the best human Go player Lee Sedol in 2016? A historical moment for the game that was previously considered to be very tough. What i

                                                    • GitHub - ChrisPenner/slick: Static site generator built on Shake configured in Haskell

                                                      Want to get started quickly? Check out the Slick site template! Slick is a static site generator written and configured using Haskell. It's the spiritual successor to my previous static-site generator project SitePipe; but is faster, simpler, and more easily used in combination with other tools. Slick provides a small set of tools and combinators for building static websites on top of the Shake bu

                                                        GitHub - ChrisPenner/slick: Static site generator built on Shake configured in Haskell
                                                      • The <code>&lt;- pure</code> pattern

                                                        Summary: Sometimes <- pure makes a lot of sense, avoiding some common bugs. In Haskell, in a monadic do block, you can use either <- to bind monadic values, or let to bind pure values. You can also use pure or return to wrap a value with the monad, meaning the following are mostly equivalent: let x = myExpression x <- pure myExpression The one place they aren't fully equivalent is when myExpressio

                                                        • SCamlによるTezosプログラミング#0

                                                          SCaml という Tezos ブロックチェーン のためのスマートコントラクト記述言語とコンパイラを作って元旦にリリースしました。 コンセプトの紹介(英語) リリースのお知らせ(英語) プロジェクトページ レポジトリ 第0回: コンセプトの説明 第1回: 準備 第2回: 概観 第3回: ウォレット操作 第4回: スマートコントラクトのデータ型 第5回: はじめての SCaml コントラクト 第6回: もう少し複雑なコントラクト。パラメータとストレージ 第7回: 投票コントラクトを書いてみる このブログではSCamlを使ったTezosスマートコントラクトプログラミングについて少しずつ日本語で連載をしていきたいと思います。 初回はプログラミングではなく、SCamlの基本設計コンセプトについてです。一部、プログラミング言語設計についての知識がなければ理解できないところがありますが、読み飛ばされて

                                                            SCamlによるTezosプログラミング#0
                                                          • 最強にして最速のビルダー、mason - モナドとわたしとコモナド

                                                            Haskell Advent Calendar 2019 5日目 この冬、神速のサンタクロースがやってくる—— Haskellにおいて、バイト列の表現はByteStringが定番である。ByteStringはPinned領域に直接格納され、空間効率はリストに比べればはるかに良い。しかし、Pinned領域にあるとヒープフラグメンテーションが起こりやすくなるということでもあり、細かい文字列をつなぎ合わせるような使い方はパフォーマンスに悪影響が及ぶ。そのような問題を避けるため、ビルダーと呼ばれる構造が用意されている。 Data.ByteString.Builderは、word8 42 <> byteString "hello" <> doubleLE 42のように細かいプリミティブを連結し、toLazyByteStringを呼ぶと最後にByteStringを一気に鋳出せるという仕組みである。By

                                                              最強にして最速のビルダー、mason - モナドとわたしとコモナド
                                                            • 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関数を実装する
                                                              • XMLをLisp評価器で実行する - golden-luckyの日記

                                                                昨日は、ドキュメントとは木であり、その木はXML、さらにいうとXMLアプリケーションとして形作られる、という話をしました。 一般にドキュメントは、生のままの構造として読み手に与えられるものではありません。 ドキュメントの構造が何らかのXMLアプリケーションであれば、本来はそのスキーマに従って解釈し、しかるべきスタイルを適用することになります。 ここで、しばしば厄介になるのは、XMLアプリケーションのスキーマを正しく扱うのはなかなか大変だということです。 そもそも、プロプラなXMLアプリケーションだと、スキーマの定義が手に入らない場合もあります。 そういった「野良XMLをどうやって扱うか」が今日からの話題です。 でもその前に、昨日の記事の最後で紹介したSXMLについて雑に補足しておきます。 XMLをSXMLに引き写すことで見える景色 さて、昨日はSXMLという技術を紹介しました。 SXMLの

                                                                  XMLをLisp評価器で実行する - golden-luckyの日記
                                                                • 独断と偏見で語るGHCのderiving系拡張 - Qiita

                                                                  先日のHaskell Dayでderivingに関する発表があった Haskell Day 2019を開催しました! aiya000, 「しんさんきぼう」のDerivingストラテジー ので、触発されて私もderivingについて思うところを書いてみます。主にderiving系拡張の落とし穴・注意点に重点を置きます。 標準でderiveできるやつ、またはGHCに組み込まれているやつ (stock deriving) 標準で Eq, Ord, Enum, Bounded, Show, Read, Data.Ix.Ix がderiveできます。この手の話題で Ix はよく見落とされます。ちゅうか Haskell 2010 Language Report, Chapter 11 のderive可能なクラスの一覧からもオミットされている……。 GHC拡張を有効にすることで、他のいくつかのクラスでも

                                                                    独断と偏見で語るGHCのderiving系拡張 - Qiita
                                                                  • Lensとは - Qiita

                                                                    Lensとは、初級者Haskellerの苦い思い出 さあさあ、やって参りました。 Haskell何個目かの鬼門にして、素晴らしく便利なアイツ、Lensの時間です。 初級者HaskellerにとってのLensといえば、「これを知らなきゃ初級者Haskellerにもなれない」と突然突きつけられて、何かと思って蓋を開ければ地獄のような型が覗く、恐怖と畏怖の対象でしょう。 調べてみても、様々な言葉で説明されるLensは、いかにもつかみどころのないものに思えます。 Lensはgetterとsetterのペア 参考: Lensの仕組みがわかった#lensを自作してみる レンズは余状態余モナドの余代数だった type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t Control.Lens.Combinators#t:Lens よ

                                                                      Lensとは - Qiita
                                                                    • Scala3と圏論とプログラミング - Qiita

                                                                      最近、圏論とプログラミングという素晴らしい資料を拝読しました。圏論とプログラミング愛に溢れる資料で読んでいて目頭が熱くなりました。そうだよな・・・プログラマにも圏論いるよな・・・ ただ、自分にとって残念だったのは、資料で説明用に選択されたプログラミング言語が「Haskell」だったことです。もちろんHaskellは素晴らしい言語です。ただ、自分にとってHaskellは外国語なのでちょっと理解が難しいのです。なのでこの資料が「Scala」で書かれていたらと夢想せずにはいられなかったのです。 Scalaと言えば昨年末にScala3のリサーチコンパイラのDottyがFeature Completeを宣言しました1。この宣言で新機能の追加は終了して、あとは2020年末のリリースに向けてひたすら品質を上げていく段階に突入しました。つまり、ようやく次世代のScalaが全貌を現したということです。 ここ

                                                                        Scala3と圏論とプログラミング - Qiita
                                                                      • ベクトルからリストを作る方法 〜次数付きモナドのカン拡張〜

                                                                        ベクトルとリスト 要素を並べたデータ構造を考える時、 ベクトルは長さが予め(型レベルで)決められたもの リストは任意の長さを取れるもの と区別することがあります。 Haskellの型で表すと、

                                                                          ベクトルからリストを作る方法 〜次数付きモナドのカン拡張〜
                                                                        • 自動微分と区間演算で非線形関数の根を全て探索するアルゴリズム - Qiita

                                                                          自動微分について調べていたら『精度保証付き数値計算の基礎』という本に出会いました。その中に非常に面白い応用が載っていたので紹介したいと思います。 allsol :: (RealFloat a, Ord a) => (forall b. Floating b => b -> b) -- 根を求める非線形関数 -> [Interval a] -- 探索する区間 -> [Interval a] -- 根が含まれている区間 これが今回紹介する、与えられた非線形関数$f$の与えられた区間における根、すなわち$f(x)=0$を満たすような$x$をただ一つ含む区間を全て探索してくれる関数(の型)です。実装を見る前にその威力を実際に使って確かめてみましょう。 > f x = (x - 1) * (x - 2) * (x - 3) > allsol f [-1e6...1e6] [ 0.9837477320

                                                                            自動微分と区間演算で非線形関数の根を全て探索するアルゴリズム - Qiita
                                                                          • 純粋関数のプロパティを記述するには - John Hughes氏のLambda Days 2020での講演より

                                                                            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が最近リリースされ、重要な変...

                                                                              純粋関数のプロパティを記述するには - John Hughes氏のLambda Days 2020での講演より
                                                                            • 新しい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について - モナドとわたしとコモナド
                                                                              • Kowainik - Foo to Bar: Naming Conventions in Haskell

                                                                                Developers spend most of their time reading code, understanding it and exploring other ways to use existing solutions. Frankly, in our profession, there is very little time on actually writing new libraries and creating new interfaces in real-life development. So it is quite important to have some help in the most common activities. Naming conventions is one such thing that improves readability an

                                                                                  Kowainik - Foo to Bar: Naming Conventions in Haskell
                                                                                • 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添え