並び順

ブックマーク数

期間指定

  • から
  • まで

241 - 280 件 / 681件

新着順 人気順

Haskellの検索結果241 - 280 件 / 681件

  • 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について - モナドとわたしとコモナド
                        • 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添え
                          • 多相関数を第一級で取り扱う

                            今回は,GHC拡張の一つ RankNTypes の紹介をしようと思う.もうちょっとちゃんとまとめたのをいつか Haskell-jp かどっかに投稿したいと思ってるんだが,時間が (さっさと書け). さて, Haskell のプログラミングにおいて多相関数はかなり重要な役割を持つ.しかしながら,標準の範囲では多相関数自体を第一級の値として扱うことはできない.私たちに許されるのは,多相関数を定義することだけだ.まあ,それだけでもかなり有用なんだけど,多相関数を第一級で扱えると,色々プログラミングの幅が広がる.今回は,多相関数を第一級として扱うというのはどういうことか,そしてそれをするにはどうすればいいか,そうすることで何がうれしいのかを簡単に触れられたらと思っている. 多相関数を第一級で扱うとはどういうことか (パラメトリック)多相関数 ((parametric) polymorphic fu

                              多相関数を第一級で取り扱う
                            • HaskellでAtCoderに参戦して水色になった | 雑記帳

                              3月下旬からAtCoderのRatedコンテストに参加しています(AtCoderプロフィール)。この度、5月26日のABC128でようやく水色になりました(AtCoder社長の記事によると、これは上位15%に相当するらしいです)。 使用言語はHaskellです。コンテストの時間中に提出したコードは全てHaskellだったと思います。 この記事では、Haskellを使う理由や、Haskellで競技プログラミングをするコツ、AtCoderでHaskellを使う際のアレコレなどを書いていきます。「水色になるための方法」みたいな話はしません(できません)。 Haskellを使う理由 私のメイン言語はHaskellなので、競技プログラミングでもHaskellを使うのは自然な発想です。 ただ、Haskellは工夫すれば高速なコードを書けますが、あちこちに「遅くなる」罠があります。罠に怯えるくらいならH

                              • Implementing HTTP/3 in Haskell - あどけない話

                                Mew.org is now speaking HTTP/3 (HTTP/2 over QUIC). If you gain access to the site using Firefox Nightly, the first connection would be HTTP/2 then the following connections should be HTTP/3 led by Alt-Svc:. Firefox Nightly This article explains insights which I found through the implementation activities of QUIC and HTTP/3 in Haskell. HTTP/2 server library I started implementing QUIC in January 20

                                  Implementing HTTP/3 in Haskell - あどけない話
                                • 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
                                  • HerokuにHaskellで作ったWebサービスを公開する簡単な方法 - Qiita

                                    趣味で作ったWebアプリをHerokuにデプロイしたのですが、4年前にまとめたHerokuにHaskellのアプリを公開するに比べてかなりデプロイが簡単になっていたので設定方法をまとめておこうと思います。 GW暇だったので簡単なバーチャルオフィスみたいなアプリを作りましたー!バックエンドはHaskellとServantで作ってます✌/ lotz84/remote-househttps://t.co/VWPRPtMN87 pic.twitter.com/CbkZ0IpMss — lotz (@lotz84_) May 4, 2020 設定方法 結論、Dockerを利用したデプロイがとても楽です。 事前にHeroku側のアプリを新規作成しデプロイするWebサービスを用意しておきましょう。ここではweb-serviceという名前のプロジェクトを作成したと仮定しますので以下のファイル名などは適宜置

                                      HerokuにHaskellで作ったWebサービスを公開する簡単な方法 - Qiita
                                    • GitHub - darrenks/atlas: concise functionless functional esolang

                                      A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

                                        GitHub - darrenks/atlas: concise functionless functional esolang
                                      • GitHub - b3nj5m1n/xdg-ninja: A shell script which checks your $HOME for unwanted files and directories.

                                        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 - b3nj5m1n/xdg-ninja: A shell script which checks your $HOME for unwanted files and directories.
                                        • Monoids in the Category of... | Blog | jackkelly.name

                                          The unfortunate meme phrase “a monad is just a monoid in the category of endofunctors, what’s the problem?” comes from two sources: The fact and most of the phrasing comes from Mac Lane’s Categories for the Working Mathematician, but “What’s the problem?” is a cheeky addition from a funny 2009 blog post: A Brief, Incomplete, and Mostly Wrong History of Programming Languages The meme words have bec

                                          • 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

                                            • 圏論入門前の準備運動―集合と写像― - Qiita

                                              想定読者と到達目標 Haskell 覚えつつ圏論も一緒に勉強しよう と思っていたけど結局は圏論に手も足も出ず、 Haskell はある程度できるようになった人へ1。 圏論とは何なのかを断片的にでも理解して、 自分が何をやってるのかを多少は把握しながら 圏論に入門できるようにするための準備運動。 目次 圏論入門前の準備運動―集合と写像― 写像とモノイドの概念を受け入れる 圏論が集合論の一般化であることを理解した気になる もう諦めない圏論入門―対象と射― もう諦めない圏論入門―圏と関手― もう諦めない圏論入門―関手と自然変換― もう諦めない圏論付録―ストリング・ダイアグラム― もう諦めない圏論基礎―極限からカン拡張へ― もう諦めない圏論基礎―モノイドからモナドへ― もう諦めない圏論基礎―高次元圏と変換手― 集合や写像とは何なのか、詳細に関しては 検索すれば幾らでも出てくるので省略する。 ここで

                                                圏論入門前の準備運動―集合と写像― - Qiita
                                              • GHC 9.2 で導入されたQuick Look型推論アルゴリズムについて - 朝日ネット 技術者ブログ

                                                初めまして、朝日ネット開発部の hogeyama です。 今回は Haskell の中級的なトピックとして、 GHC 9.2 で導入された Quick Look 型推論アルゴリズムを取り上げようと思います。 概要 Haskell のデファクトスタンダードなコンパイラである GHC では通常の多相(ジェネリクス)の一般化である非可述的多相(impredicative polymorphism)を実装していますが、その型推論アルゴリズムは長らく「型推論が弱い」「実装が不安定でコンパイラのバージョンアップでデグレが起きる」といった問題を抱えていました。 しかし昨年10月、Quick Look という新しいアルゴリズムが GHC 9.2 に実装されたことでこの問題が解決しました。 本記事ではこの Quick Look によって何が変わるのか、利用する際に何に気をつければよいのかを非可述的多相の概要

                                                  GHC 9.2 で導入されたQuick Look型推論アルゴリズムについて - 朝日ネット 技術者ブログ
                                                • 最短経路問題をCofree+Nexus構成で解く - Qiita

                                                  タイムラインにでてきたやつです. 進捗。「Pythonどころかプログラムもはじめて」という学生に容赦なく動的計画法をぶっこんでいくスタイル。 pic.twitter.com/23FkNYy4ZP — ロボ太 (@kaityo256) 2019年6月7日 よくある問題ですね. ダイクストラで解くのが定番だと思いますが,最近CofreeでNexus構成するのがマイブームなのと問題のネットワークもたまたま二分木で表現できる範囲だし,今回はその方向で解いてみました. 実装 直近で書いた累積百ます計算,パスカルの三角形,関・ベルヌーイ数を計算するとあんまり変わりません. ここでTreeの枝に重みを持たせるように双関手TreeFを台関手として定義します. -- | Tree data TreeF a x = Tip a | Bin (a, x) (a, x) deriving Show type Tr

                                                    最短経路問題をCofree+Nexus構成で解く - Qiita
                                                  • 2020年に「すごいHaskellたのしく学ぼう」を { -# OPTIONS -Wall -Werror #- } を付けて読む - Qiita

                                                    2020年に「すごいHaskellたのしく学ぼう」を { -# OPTIONS -Wall -Werror #- } を付けて読む はじめに 現在、書籍「すごいHaskellたのしく学ぼう」(第1版第4刷)を読んでHaskellを勉強しています。 Haskell入門の良書として有名なようなのですが2012年発行で多少情報が古くなっているので、今からこの書籍を読もうという方はこちらの記事などを参考にすると良いと思います。 2017年に「すごいHaskellたのしく学ぼう」を読む この書籍の p. 37 の訳注で、{-# OPTIONS -Wall -Werror #-} という記述を .hsファイル(Haskellのコードを記述するファイル)の先頭行に付け、通常より厳密な警告を有効にすることが提案されています。こうすると:l hogehoge(ファイル名)で.hsファイルをコンパイル&ロード

                                                      2020年に「すごいHaskellたのしく学ぼう」を { -# OPTIONS -Wall -Werror #- } を付けて読む - Qiita
                                                    • 閉半環を使ってグラフ上の最短距離を計算する!

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

                                                        閉半環を使ってグラフ上の最短距離を計算する!
                                                      • 圏論入門|日本評論社

                                                        第1章 圏・関手・自然変換 1.1 集合と写像から 1.2 圏・対象・射 1.3 圏のデータ構造 1.4 関手・反変関手 1.5 忠実関手と充満関手 1.6 自然変換 1.7 Haskの部分圏 第2章 自然変換と圏同値 2.1 関手圏 2.2 圏同値 第3章 普遍性と極限 3.1 始対象と終対象 3.2 積 3.3 余積 3.4 極限 3.5 余極限 3.6 極限の存在 3.7 余極限の存在 第4章 関手と極限の交換 4.1 関手は錐や余錐を写す 4.2 Hom関手と極限 4.3 Hom関手と余極限 4.4 実行可能な例 4.5 極限を関手とみる 第5章 随伴 5.1 随伴とは 5.2 単位と余単位 5.3 三角等式 5.4 普遍射と随伴 5.5 随伴の同値な言い替え 5.6 随伴と圏同値 5.7 随伴の大局的な自然性 5.8 随伴と極限 第6章 モナドとHaskellのMonad 6.1

                                                          圏論入門|日本評論社
                                                        • GitHub - graninas/software-design-in-haskell: Software Design in Haskell. A structured set of materials. How to build real-world applications in 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 - graninas/software-design-in-haskell: Software Design in Haskell. A structured set of materials. How to build real-world applications in Haskell.
                                                          • 動的配列の無難なHaskell実装 - モナドとわたしとコモナド

                                                            qiita.com C++、Rust、Pythonなど、他の言語では当たり前のように多用される動的配列だが、Haskell実装は(開発を始めた時点では)見当たらなかったので作ってみたお話*1。 動的配列とはミュータブルな配列の一種で、通常の配列操作だけでなく、末尾への要素の追加・削除が定数時間で行える構造である。確保しておいた領域がいっぱいになったら、その2倍の大きさの領域を確保するという方法によって、漸近的には要素の追加は定数時間となる。 内部の配列には、デファクトスタンダードであるvectorパッケージを用いる。Vectorには無印(boxed)、Unboxed、Storableの三種類の変種があり、それぞれ以下のように使い分ける。 無印(Data.Vector): サンク含め、任意のHaskellのオブジェクトを格納できる。Traversableなどのインスタンスであり、汎用性が高い

                                                              動的配列の無難なHaskell実装 - モナドとわたしとコモナド
                                                            • 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
                                                              • Security

                                                                  Security
                                                                • 「コンピュータを操る」

                                                                  「コンピュータを操る」 浅井 健一 著、 「コンピュータを操る」 プログラミングを通して「情報科学的なものの考え方」を学ぶ サイエンス社、 2020 年 2 月 出版、 Computer and Web Sciences Library 2 各章で作られるゲーム 4章: 白いゲーム画面が出る。 5章: 背景画像と自転車の画像が表示される。 6章: 自転車が左に動く。(ユーザはまだ何もできない。) 7章: 自転車を矢印キーによって動かせるようになる。 8章: 自転車が動けるのは道路上のみになる。 9章: 自転車に積んでいる牛乳、ヨーグルトの量が表示されるようになる。 10章: 一番、左上の配送先に牛乳を届けると数が変化する。 自宅に戻ると牛乳の数が 9 に戻る。 11章: 各配送先に牛乳、ヨーグルトを届けられるようになる。 プログラミング環境 全部で 5.3M ほどあります。 回線が細いと読

                                                                  • ElixirとHaskellの根底にある同じもの、そして、Elixirが辿った道

                                                                    本当のDXはSF的で未来志向、そしてサイバーパンク【from 総務省 ICT技術セミナー「自分ごとにするDX」】

                                                                      ElixirとHaskellの根底にある同じもの、そして、Elixirが辿った道
                                                                    • What killed Haskell, could kill Rust, too

                                                                      What_killed_Haskell_could_kill_Rust.md At the beginning of 2030, I found this essay in my archives. From what I know today, I think it was very insightful at the moment of writing. And I feel it should be published because it can teach us, Rust developers, how to prevent that sad story from happening again. What killed Haskell, could kill Rust, too What killed Haskell, could kill Rust, too. Why wo

                                                                        What killed Haskell, could kill Rust, too
                                                                      • Haskellライクな構文をEgisonに実装している話 - momologue

                                                                        これは言語実装Advent Calendar 2019の2日目の記事です。 私は少し前から、楽天技術研究所でEgisonの開発アルバイトをしています。入社してから初めての大きなプロジェクトとしてEgisonの構文を新しくするというのを担当しているので、その紹介と、設計/実装で悩んだ(でいる)ことなどを書こうと思います。 Egisonとは Egisonについて聞いたことがないという人はとりあえず公式サイトを見てほしいのですが、概要としては 表現力豊かなパターンマッチ(非線形パターン*1など) (上のパターンマッチを利用して実装された)数式処理システム を強みとし、プログラムや数式を簡潔に記述できることに重きを置いているプログラミング言語です。 これまでEgisonはS式(Lispのようなカッコが多い文法)の構文を持っていましたが、Lispに習熟している人を除く大抵の人にとってはS式はあまり読

                                                                          Haskellライクな構文をEgisonに実装している話 - momologue
                                                                        • 協調型スケジューリング vs. 先取り型スケジューリング

                                                                          この記事はCooperative vs. Preemptive: a quest to maximize concurrency powerの翻訳・意訳記事になっています。 動機 私のチームはJavaを多用しています。システムを構築するために、ウェブサーバやデータベースドライバなど、多くのものに、スレッドを介した同時実行機能を内蔵した、実績のあるオープンソースのJavaライブラリを使用しています。 また、ビジネス特有のロジックを実装する際には、Javaのスレッド化命令を利用して同時実行を実現しています。 しかし、時間が経つにつれ、パフォーマンスの問題が見えてきました。 Javaアプリには合計1万個のスレッドが実行されていたため、ホストのRAMをすべて占有してしまうサービスがありました。 64ビットのJVMのスレッドのスタックサイズが1024バイトであるため、スレッドが1万もあるとスタックだ

                                                                            協調型スケジューリング vs. 先取り型スケジューリング
                                                                          • Haskellのsomeを正格評価したら無限ループする話 - 星にゃーんのブログ

                                                                            パーサコンビネータなんかでよく使う、 some と many という関数があります。それぞれ引数を1回以上/0回以上実行して結果のリストを返す関数で、これの単純な定義は some v = (:) <$> v <*> many v many v = some v <|> pure [] となります。 some は v : (many v) 、 many は some v または [] を返すイメージです。 パーサコンビネータでは、例えば英数字1文字以上の文字列をパースしたいとき some alphaNum と書いたりします。 面白いのは、一見とても自明に思えるこの定義は、遅延評価がないと無限ループしてしまう点です。 本当は v が失敗したら some v 自体が失敗してほしいところが、v が失敗するか否かに関わらず many v が実行されてしまいます。正格評価の気持ちで考えるとあたりまえで

                                                                              Haskellのsomeを正格評価したら無限ループする話 - 星にゃーんのブログ
                                                                            • GitHub - zesterer/tao: A statically-typed functional language with generics, typeclasses, sum types, pattern-matching, first-class functions, currying, algebraic effects, associated types, good diagnostics, etc.

                                                                              You can now test Tao in the browser! A statically-typed functional language with polymorphism, typeclasses, generalised algebraic effects, sum types, pattern-matching, first-class functions, currying, good diagnostics, and much more! For more example programs, see... hello.tao: Hello world input.tao: Demonstrates a more complex example of IO effects calc.tao: A CLI calculator, demonstrating parser

                                                                                GitHub - zesterer/tao: A statically-typed functional language with generics, typeclasses, sum types, pattern-matching, first-class functions, currying, algebraic effects, associated types, good diagnostics, etc.
                                                                              • 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の最近の乱数生成事情について
                                                                                • Functorio

                                                                                  You might have heard people say that functional programming is more academic, and real engineering is done in imperative style. I’m going to show you that real engineering is functional, and I’m going to illustrate it using a computer game that is designed by engineers for engineers. It’s a simulation game called Factorio, in which you are given resources that you have to explore, build factories

                                                                                    Functorio

                                                                                  新着記事