タグ

Haskellに関するuehajのブックマーク (73)

  • Strict Haskell - あどけない話

    次のバージョンである GHC 8.0 では、正格評価用のプラグマして Strict と StrictData が提供されます。環境を作ってみたので、少し試しました。 以下のファイルを用意します。 {-# LANGUAGE DeriveFunctor #-} module A where data List a = Nil | Cons a (List a) deriving (Eq,Functor) xs :: List Int xs = Cons 1 (Cons 2 Nil) 注意: トップレベルの束縛とローカルの束縛では挙動が違います。Strict が効くのは、ローカルの束縛です。なので、GHCi で let を使って試します。 評価が遅延しているかは、GHCi の :sprint コマンドで確かめられます。GHC 7.8 以降の GHCi では MonomorphismRestric

    Strict Haskell - あどけない話
  • 並行プログラミングと継続モナド

    前編 (平衡二分探索木編) はこちら http://www.slideshare.net/iwiwi/2-12188757

    並行プログラミングと継続モナド
    uehaj
    uehaj 2015/09/15
    並行プログラミングと継続モナド
  • たのしい型レベルプログラミング

    第3回関西関数型道場 スライド

    uehaj
    uehaj 2015/07/07
    "正気をなくそう!" wwwww
  • Haskellの型クラスを活用する - モナドとわたしとコモナド

    Haskellの型クラスは、うまく使えば高いパフォーマンスと抽象度を両立できる、優れた仕組みである。その使い方のコツは、決して理解の難しいものではない。 小さな性質、大きな恩恵 プログラマは大きなものを小さく見せがちだ。オブジェクト指向プログラミングに慣れている人がやりがちなアンチパターンとして、欲しい機能と、それを分割する基準が現実に寄りすぎていて、一つ一つが巨大というものがある。 普通のプログラミングではありえない例かもしれないが、たとえば家を作りたいことを考える。「ベッド」「箪笥」「台所」「冷蔵庫」「トイレ」「風呂」のように設備ごとに分けた抽象化をしたいと考えるだろう。確かにこれは理に適っているように見える。だが、これらの設備を型クラスでまとめるのは悪手だ。 風呂やトイレには水を利用できるという性質が、冷蔵庫には電気が必要だ。部屋と部屋は壁で仕切られ、場合によっては扉があるかもしれな

    Haskellの型クラスを活用する - モナドとわたしとコモナド
    uehaj
    uehaj 2015/06/23
    "型クラスは「複雑な処理をまとめる」というよりは「特定の性質を持つ処理を最適な形で具体化する」もの"
  • stack コマンドを使ってみた - 趣味はデバッグ……

    6月9日に FP Complete から stack コマンドがリリースされました(公式ブログ)。とりあえずブログ1文目を訳すとこんな感じです。 stack は新しく、完璧で、クロスプラットフォームで動作する開発ツールで、新参も古参も対象にしていて、コンパイラーをインストールしてセットアップして、必要なパッケージをインストールして、ビルドして、プロジェクト内の1つ以上のパッケージのテストをするもしくはベンチマークを取るためのものです。 stack is a new, complete, cross-platform development tool aimed at both new and experienced Haskell developers alike, for installing and setting up the compiler, installing package

    stack コマンドを使ってみた - 趣味はデバッグ……
    uehaj
    uehaj 2015/06/15
    "とりあえず Windows での Haskell 環境がめっちゃ楽になったぞい、です。"
  • Web API に型を付ける話

    2015/06/07みなさん型付けしていますか? Haskellのような柔軟な型に慣れてくると何でもかんでも型で表現できないと気がすまなくなってきますよね💃 今日はservantというWeb Application Framework(WAF)を紹介します。 特徴としてチュートリアルでは以下の4つが挙げられています 簡潔である 汎用的・柔軟性がある 関心の分離 型安全である 簡潔に書けたり汎用的であることはWAFであれば当然持っていて欲しい特徴でありますが、関心の分離と型安全であるというのはどういうことでしょうか? 関心の分離というのは何と何を分離しているかというと、APIのリクエストとレスポンスに関する処理と内部のロジックを分離しようという話です。例えば一般的なWAFであればリクエストで送られてきたbodyをパースして目当てのデータを作る必要があったり、ヘッダーに含まれるデータを検索し

  • If Haskell were strict, what would the laziness be like?

    Recently a question by Chris Done on Reddit has spawned yet another debate on the subject of whether Haskell’s laziness is actually a good thing. With this post I’m not going to state my take on the matter, instead I’ll speculate on what Haskell could be like were it a strict language and how it would approach the standard problems. Conditions Deferred Thunk Thoughts on compiler extensions Conclus

    If Haskell were strict, what would the laziness be like?
  • How Haskellers are seen and see themselves

    How Haskellers are seen The type system and separated IO is an awkward, restricting space suit: Spending most of their time gazing longingly at the next abstraction to yoink from mathematics: Looking at anything outside the Haskell language and the type system: Using unsafePerformIO: How Haskellers see themselves No, it’s not a space suit. It’s Iron Man’s suit! The suit enables him to do impressiv

    uehaj
    uehaj 2015/05/23
    おもろい
  • Groovy で AST 変換してみた | TECHSCORE BLOG | TECHSCORE BLOG

    初めまして、田中と申します。"Groovy" と聞けば、まず「気分はグルービー」という青春漫画を思い出す、そんな世代の人間です。 さて、Groovy ですが、「Gradle を使うために仕方なく覚える言語」と思っていませんか? 私は、古いシステムの改修の一環として Ant を Gradle に置き換えることになり、最近 Groovy を使い始めたのですが、当初はそのように思っていました。しかし、実際に使ってみると、結構便利だし、なかなか興味深い言語だと感じます。とりわけ、すごいと思ったのが「AST 変換」です。 AST 変換とは Groovy のコードは、最終的には Java バイトコードに変換されますが、ソースコードからいきなりバイトコードに変換されるわけではなく、まず文法構造をツリー形式で表した AST (Abstract Syntax Tree:抽象構文木) と呼ばる中間表現が作成さ

    uehaj
    uehaj 2015/04/14
    "さて、Groovy ですが、「Gradle を使うために仕方なく覚える言語」と思っていませんか?" "しかし、実際に使ってみると、結構便利だし、なかなか興味深い言語だと感じます。とりわけ、すごいと思ったのが「AST 変換」です"
  • Haskellでの合成可能なオブジェクトの構成とその応用

    Haskellでの合成可能なオブジェクトの構成とその応用
    uehaj
    uehaj 2015/03/07
    HaskellでのOOP
  • parser_benchmarks/README.md at master · rust-bakery/parser_benchmarks

    This repository holds benchmarks comparing various parser libraries: nom, a parser combinators library written in Rust combine, a parser combinators library written in Rust pest a PEG parser written in Rust hammer a parsers combinators library written in C attoparsec, a parsers combinators library written in Haskell Along with existing libraries for comparison: Joyent's HTTP parser for NodeJS, wri

    parser_benchmarks/README.md at master · rust-bakery/parser_benchmarks
    uehaj
    uehaj 2015/03/05
    パーサコンビネータライブラリのベンチマーク、Nom /Rustがattoparsec/Haskell、Hammer/Cより速いぞ!
  • 実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog

    これは2014年のG*アドベントカレンダーの第23日目の記事のつもりでしたが、12時すぎてしまいましたorz。 HaskellやScalaRustには型クラスという言語機能があり、個人的感想として、理解が難しかったものの一つです。いわく、インターフェースのようなもの。いわく、オープンクラスのようなもの、など。 わからなければ作ってみるのが一番です。なのでGroovyで型クラスを実装してみました。 ソースはこちら。 ただし実用的なものではなく、学習用です。また実装したのは概念のコア部分のみで、言語によって詳細は異なることに注意ください。 型クラスとは何か 型クラスとは、多相型・ジェネリクス型の型引数(仮型引数)に対して、「ある型に対して可能な操作の集合」を、制約として与え、またそれらの操作が可能であるという保証を、「クラスの継承関係」とは無縁の方法で与えるものです。 別の言い方で言うと、「

    実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog
    uehaj
    uehaj 2014/12/24
    追記 "仮想関数による多態性イラネ。原語では同じ単語で多相性とかぶってる""操作のレシーバーという概念は非対称で嫌。レシーバーと他の引数、戻り値の型に非対称性があり、数学的概念の記述などでの一般性を阻害す
  • Haskellの関数合成が苦手に感じるわけを考察してみた - Qiita

    最初に断っておきますが、当エントリは実用的ではありません。 Haskell初心者が挫折しがち(と思われる)関数合成について、思いを共有出来ればいいなと思っています。 関数合成を書くのって、何だか難しい Haskell初心者の鬼門、関数合成。 なんかかっこいいから使ってみたい。letを使ったら負け、$を使った負け・・・という思いで頑張ってみるものの、なかなかうまく書けない・・・ なぜ私はこんなに関数合成を苦手に感じるのか。整理して解決への糸口を探してみることにしました。 関数合成は思考と記述の順番が逆 私が感じるに、関数合成が分かりにくいのは 後ろから 関数が適用されるのに違和感があるからです。 例として複数行から成る文字列の各行の先頭に行番号を付けるプログラムを書いてみます。 f = unlines . map (\(f, s) -> f ++ s) . zip (map show [1.

    Haskellの関数合成が苦手に感じるわけを考察してみた - Qiita
    uehaj
    uehaj 2014/12/11
    F#やElmの関数合成演算子>>を検討していただきたい
  • 「関数プログラミング実践入門」を読みました | mah365

    かなり気になっていた関数プログラミング実践入門というを早速買って読んでみました。 「関数プログラミングの考え方」が分かる 書は「関数プログラミングで何か作れるようになる」というよりは、「関数プログラミングの考え方がしっかり分かる」という感じで、「普段はJavaRubyといったオブジェクト指向言語を使っているけど、何か関数型言語が気になるんだよねー」というノリの人に向いているだと僕は思いました。 普段関数型言語を使っていない人、というと大多数の人がそうだと思いますが、その大多数の人に向けて「関数プログラミングの考え方ってこんな感じよ」というのを伝えているのが書になります。 内容は 関数型言語Haskellを題材とした関数プログラミングが備える要素の解説 関数プログラミングでの設計テクニック が大きな2柱になっていて、特に「普段はJavaRubyといったオブジェクト指向言語

    「関数プログラミング実践入門」を読みました | mah365
    uehaj
    uehaj 2014/12/04
    "型付けするということは、直面している問題がどのような性質のものであるかを決めるということ"
  • Chris Biscardi's Digital Garden

    Prerequisites: an install of Docker (If you don’t want an install, Digital Ocean also has a Docker Droplet). The Docker-Haskell “Official Images” container is available for download. You can find the source over on GitHub and the versions currently being built in the official-images repo. To start a ghci we can pull and run the image tagged as 7.8, which contains alex, happy, cabal and ghc-7.8.3:

    Chris Biscardi's Digital Garden
  • HaskForce - The Haskell plugin for IntelliJ IDEA

    HaskForce - The Haskell plugin for IntelliJ IDEA

  • Pure boys script

  • Amazon.co.jp: 関数プログラミング 珠玉のアルゴリズムデザイン: Richard bird (著), 山下伸夫 (翻訳): 本

    Amazon.co.jp: 関数プログラミング 珠玉のアルゴリズムデザイン: Richard bird (著), 山下伸夫 (翻訳): 本
  • Debug.Traceで関数の引数を表示するイディオム - maoeのブログ

    Haskellでよくある複数行の関数定義だったり、ガードを使っている場合、全ての場合について引数をtraceするコードが書きにくいことがある。例えば、 data A = A1 | ... data B = B1 | ... data C = C1 | ... f :: A -> B -> C -> ... f A1 b c = ... f a B1 c = ... f a b C1 = ... こんな定義でaとbとcをどの場合についてもtraceしたい場合、各行にそれぞれtraceを書く必要がありそうに見える。 f :: A -> B -> C -> ... f A1 b c = traceShow (A1, b, c) $ ... f a B1 c = traceShow (a, B1, c) $ ... f a b C1 = traceShow (a, b, C1) $ ... そうい

    Debug.Traceで関数の引数を表示するイディオム - maoeのブログ
  • Reimplementing a NodeJS Service in Haskell

    node-haskell.md Introduction At DICOM Grid, we recently made the decision to use Haskell for some of our newer projects, mostly small, independent web services. This isn't the first time I've had the opportunity to use Haskell at work - I had previously used Haskell to write tools to automate some processes like generation of documentation for TypeScript code - but this is the first time we will b

    Reimplementing a NodeJS Service in Haskell