タグ

haskellに関するjewel12のブックマーク (32)

  • 存在型 (Existentially quantified data constructors) | tnomuraのブログ

    Haskell の存在型というのは一体どういう意味なのだろうか。文字列型や整数型なら意味がわかる。しかし、存在型の存在という言葉にどんな意味がこめられているのか見当もつかない。 探し回っていたら、GHCのマニュアルの 7.4. Extensions to data types and type synonyms というページを見つけた。このページの 7.4.5. Existentially quantified data constructors に存在型の説明が書いてあった。これを読んだら疑問が氷解した。どうも存在型 (Existetial type) の「存在 (Existential) 」というのは、述語論理学の存在量化子の「存在」らしい。たとえば、「ある自然数 n について、n * n は25である」という命題を述語論理学の記号で書くと下のようになる。 ∃n (n ∈ N, n *

    存在型 (Existentially quantified data constructors) | tnomuraのブログ
  • Haskellのビルドツール"stack"の紹介 - Qiita

    Stackとは? つい先日のことですが、Stackage界隈からstackというツールがリリースされました。リリースされたとはいえ、開発され始めたのがちょっと前のことですし、現在も盛んに機能が追加されているので、絶賛開発中であるとかそういったほうがいいかもしれません。 まだ開発の始まったばかりのツールなのに、なぜこんな紹介記事を書こうと思ったのかというと、このツールがHaskellの開発において極めて有用になることが確定的に明らかであって、すでに荒削りながらも、大変便利に使えているからなのです。そしてここで紹介することで、多くの読者の方に興味を持ってもらって、それで開発がさらに盛り上がっていくと嬉しいなあと、そう思った次第であります。 なお、stackの開発が始まる少し前に、stackage-cliを始めとするいくつかのツールがリリースされましたが、今後開発はstackに一化されるような

    Haskellのビルドツール"stack"の紹介 - Qiita
  • Lens&Prism勉強会 私的まとめ :: Igreque -> Info

    Lens&Prism勉強会 私的まとめ by Yuji Yamamoto on June 9, 2015 もう開催から1週間以上経ってしまいましたが、Lens&Prism勉強会に行ってきたのでそのまとめ記事です。 当日しこしことっていたメモと記憶を頼りに、発表内容や個人的な気付きなどを書きます。 @gakuzzzzさんの「Lensの説明」 connpassには別のスライドが貼ってありますが、実際の中身はBeyond Scala Lensというスライドの日語での解説でした。 要約するとこんな感じの表に収まるのですかね。 スライドではScalaでの呼び名で説明されてましたが、ここでは私向けにHaskellに訳しています。 -- 全てのsをaに変換でき、かつ全てのaをsに変換できる関数のペア Iso' s a: f :: s -> a, g :: a -> s -- 全てのsからaに変換できる

  • dnngraph by ajtulloch

    dnngraph A DSL for deep neural networks, supporting Caffe and Torch View on GitHub Download .zip Download .tar.gz DNNGraph - A deep neural network model generation DSL in Haskell It consists of several parts: A DSL for specifying the model. This uses the lens library for elegant, composable constructions, and the fgl graph library for specifying the network layout. A set of optimization passes tha

  • optparse-applicativeをふわっと使う - Qiita

    Help us understand the problem. What is going on with this article?

    optparse-applicativeをふわっと使う - Qiita
  • Stateモナドとモナドトランスフォーマー - yunomuのブログ

    前フリ 最近@seizansさんが新人Haskell使いを増やしまくっている。 で、その人達がググった時のために先にたくさんブログ記事書いて釣ろうぜっていう話をしていたけど、@kazu_yamamotoさんとか@nom4476さんらが仰るように、一旦自分がわかってしまうとなかなか記事を書く気力が起きない(し、子育てで忙しいので後は任せたって言われた)。 そうこうしているうちに@seizansさんがすごい勢いでHaskell力を伸ばしはじめた。 なので最近彼が覚えたらしいモナドトランスフォーマーの入門的な記事をStateモナドと合わせて先回りして書いてしまおうというわけす。引用数を稼ぐには先手必勝です。 Stateモナド Haskellで一時的な状態を持たせたい時はStateモナドを使うらしいですよ。 といっても何が何だかよくわかんないんですけど、 状態モナド遊び - あどけない話 この記事

    Stateモナドとモナドトランスフォーマー - yunomuのブログ
  • Tutorial: Profiling Cabal projects

    Profiling in Haskell can be an overwhelmingly confusing task. There’s plenty of little things you need to set up right to be able to perform it. This post aims to organize this information. Summary The project must be configured with profiling enabled. Some specific options must be set when configuring the profiling executable in the “.cabal” file. All the project’s dependencies must be installed

    Tutorial: Profiling Cabal projects
  • Motivation behind Phantom Types?

  • undefinedの代わりに$notImplementedを使おう - maoeのブログ

    Haskellで一からコードを書くとき、よく型だけ書いて実装はundefinedにすることがあります。これはとても便利な常套手段なんですが、規模が大きくなってきたり、undefinedな数が多くなってくると不便に思うこともあります。 undefinedとplaceholders 一通り関数とその型の概要ができてきて、小さく動かせる範囲で実装していきましょうという段階に入ると、動かしながら実装したくなるものです。 このとき未実装の部分をundefinedにしておくと、実行時には例外が上がります。残念なことにこの例外はどこから上がったものなのかエラーメッセージを見てもわかりません。 例えばこんな感じ… Foo: Prelude.undefinedこれじゃつらいので行番号を出せるようにします!というのがplaceholdersライブラリです。 使い方は簡単で、 f :: MonadFooBar

    undefinedの代わりに$notImplementedを使おう - maoeのブログ
  • Haskellの単体テスト最前線 kazu-yamamoto/unit-test-example · GitHub

    #Haskellの単体テスト最前線 [To English] これはHaskell Advent Calendar 2012の5日目の記事です。 Haskellで作成したパッケージに対して、単体テストを書くための最新情報をお届けします。以下の記事では、Haskell Platform 2014.2.0.0 以降を使うことを前提とします。 ##要約 要点は4つです。 利用者に見せたい振る舞いは、doctest で書く 利用者に見せたくない振る舞いは、hspec で書く テストを自動化するフレームワークとしては Cabal を使う doctest でも hspec でも、純粋なコードに対しては、できるだけ QuickCheck などの性質テストを書く この記事で一番伝えたいのは、3) です。例題としては、Base64 という符号化を取り上げます。Base64 は知っていると仮定して話を進めます

    Haskellの単体テスト最前線 kazu-yamamoto/unit-test-example · GitHub
  • Chips Challenge in Haskell (demo)

  • 高速な累乗計算 - あどけない話

    累乗(x^n)を単純に計算すると、オーダーは O(n)となり効率が悪いです。そこで、nを2の累乗に分解して計算する高速化手法が一般に知られています。 たとえば、3 の 11 乗を計算する場合を考えましょう。11 は 1 + 2 + 8 に分解できます。 この累乗の系列では、ある値は一つ前の値を2乗することで計算できます。たとえば、こうです。 3^1 = 3 3^2 = 3 * 3 = 9 3^4 = (3^2)^2 = 9^2 = 81 3^8 = (3^4)^2 = 81^2 = 6561よって、3^11 は以下のように計算できます。 3^11 = 3^(1+2+8) = 3^1 × 3^2 × 3^8 = 3 × 9 × 6561 = 177147この方法のオーダーは、O(log2(n)) です。 遅延評価風に RSA のために高速な累乗計算を Haskell で実装したことがありまし

    高速な累乗計算 - あどけない話
  • Haskell競技プログラミング入門 - Qiita

    import Text.Printf main = do printf "%04d" 10 -- 4桁0詰め mapM_ print [1,2,3] -- リストの中身を1行ずつ出力 データ構造 普通にアプリケーション作っているときは気にしなかったけど、競プロだと時間がないとかドキュメント読んでる場合じゃないとかオンラインジャッジの環境が古いとかいう理由でデータ構造の選択にはほとんど余地がないことが多い。 自分の場合はだいたいこう: 速度にこだわらない/先頭への追加しかしない: List メモ化再帰のメモ: Array使う人が多いけどIntMapでも別にいいんじゃない?(と個人的には思っている) それ以外(ランダムアクセス・挿入・削除・優先度付きキューを使いたい): IntMap ABCとかだと実際ListとIntMapくらいあれば十分なことが多い印象。他の言語でアルゴリズムとかを学んだこ

    Haskell競技プログラミング入門 - Qiita
  • Haskellプログラミングのコツのようなもの - Qiita

    こちらを読んだらその2もどうぞ とあるお題 シンプルな問題だけどHaskellプログラミングの基的な考え方を伝えるには良い題材だと思います.解説を試みましょう.お題は3題. テキストデータを読んで40文字以下の行のみ表示せよ. テキストデータを読んで各行の最後の10文字を表示せよ. テキストデータを読んで各行の5番目の文字を表示せよ. お題の分析 お題のプログラムはどれも 標準入力からテキストデータ(を表す文字列)を得る 元のテキストデータをゴニョゴニョして結果をテキストデータにする テキストデータ(を表す文字列)を標準出力に置く というパターンです.ゴニョゴニョの部分の関数をgonyoと名付けましょう.gonyoの具体的な内容はお題ごとに異りますが,型は共通しています.その型シグネチャはgonyo :: String -> Stringです.実は,String -> String型の関

    Haskellプログラミングのコツのようなもの - Qiita
  • Haskellで競技プログラミング IO編 - Qiita

    _この記事は2013年の情報オリンピック夏季セミナーの発表のために 動機 Haskellには競技プログラミングに使えるCoolな機能が沢山あります。 パターンマッチやプレースホルダ、パターンガード、柔軟な関数合成などです。 下はAtCoder Regular Contest #14のB問題に対する回答です。 再帰や場合分けがかなりシンプルに書けます。 import Control.Monad import Control.Applicative import Data.List main :: IO () main = do n <- readLn (w:ws) <- replicateM n getLine putStrLn $ case check [w] ws True of Nothing -> "DRAW" Just True -> "WIN" Just False -> "LO

    Haskellで競技プログラミング IO編 - Qiita
  • https://github.com/serras/emacs-haskell-tutorial/blob/master/tutorial.md

    https://github.com/serras/emacs-haskell-tutorial/blob/master/tutorial.md
  • 警告と正気度チェックのためのオプション

    GHCでは、いくつかのオプションを使って、生成する致命的でないエラーメッセージ(警告ともいう)の種類を選ぶことができる。デフォルトでは、一般にプログラムのバグを示していることが多い警告が有効になっている。これは-fwarn-overlapping-patterns、-fwarn-warnings-deprecations、-fdeprecated-flags、-fwarn-duplicate-exports、-fwarn-missing-fields、-fwarn-missing-methods、-fwarn-lazy-unlifted-bindings、-fwarn-wrong-do-bind、-fwarn-dodgy-foreign-importsである。以下のフラグは標準的な警告の「詰め合わせ」を簡単に選択するためのものである。 -W: 標準的な警告に加えて、 -fwarn-inco

  • Reddit - Dive into anything

  • Listモナドで非決定性計算 - ももいろテクノロジー

    Listモナドを使うと、SICPのamb評価器が行うような非決定性計算ができる。 たとえば、ピタゴラス数を列挙するコードは次のように書ける。 -- ptriples.hs import Control.Monad -- guard関数を使うため ptriples = do a <- [1..] b <- [1..a] -- b <= a c <- [a..a+b] -- c を斜辺とすれば a <= c かつ三角不等式より c <= a+b guard (a*a + b*b == c*c) return (b,a,c) -- 小さい数から並べる main = mapM_ print ptriples $ runghc ptriples.hs (3,4,5) (6,8,10) (5,12,13) ... これは、次のPythonコードとほぼ同じように動作する。 # -*- coding: u

    Listモナドで非決定性計算 - ももいろテクノロジー
  • Yコンビネータ実装しなイカ?

    数学的な話になりますが、不動点というものがあります。不動点とは、ある写像に対して自分自身に写される点のことです。例えば、f(x) = x^2という関数に対して、x = 0、x = 1という点は不動点です。(f(0) = 0、f(1) = 1だからです。) さて、上の説明では一階関数の不動点を例にとりました。同じように高階関数に対しても不動点が存在します。高階関数fと、別の関数pに対してf(p) = pが成り立つとき、関数pを関数fの不動点といいます。