タグ

haskellに関するhikazohのブックマーク (61)

  • Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 前回よりはもう少し実用的な例を. Template Haskell を使って,Haskell のコード中に JSON をそのまま埋め込むことができるようにする.また,あらかじめ用意しておいた JSON ファイルをコンパイル時に読み込み,指定したデータ型の値にする. ToC コード中に JSON を埋め込む コンパイル時に JSON をファイルから型安全に読み込む 環境 stack --version Version 1.6.3 x86_64 hpack-0.20.0 $ stack ghc -- --version The Glorious Glasgow Haskell Compilation System, version 8.2.2 $ stack list-dependencies | grep -e aes

    Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする - ryota-ka's blog
  • ClojureとHaskellで簡単なコマンドラインツール(RESTクライアント)を作ってみた - Qiita

    昨年末のAdvent Calendarで2回に分けて紹介したsituated-program-challengeのClojure/Duct版実装とHaskell/Yesod版実装ですが、そこではもともとの課題のうちRESTサーバしか実現できていなかったため、今回新たにRESTクライアント実装についてご紹介します。 Clojure/Duct版RESTサーバ: lagenorhynque/situated-program-challenge/rest-server at clj-version1 ClojureのDuctでWeb API開発してみた - Qiita Haskell/Yesod版RESTサーバ: lagenorhynque/situated-program-challenge/rest-server at hs-version1 ClojurianがHaskellでWeb API

    ClojureとHaskellで簡単なコマンドラインツール(RESTクライアント)を作ってみた - Qiita
  • ClojurianがHaskellでWeb API開発に入門してみた - Qiita

    Clojurian時々Haskellerでラブライブ!ファン(海未🏹&曜⛵推し)のlagénorhynque (a.k.a. カマイルカ)です。 Opt Technologies所属で、普段は広告運用に関わる社内向けプロダクトをPHP, TypeScript, Clojureで開発しています。 最近までにClojureをプロダクトに導入したり、Haskell/Elmプロダクトの開発者を募集したりと、社内でもClojureやHaskellといった言語への注目度がこれまで以上に高まっています(断言)。 そこで今回は、今年11月から新たに始まったClojure勉強会clj-nakanoでの課題を題材に、HaskellでのWeb API開発に入門してみることにしました。 ちなみにclj-nakanoといえば、Clojure開発者Rich HickeyのClojure/conj 2017でのキーノ

    ClojurianがHaskellでWeb API開発に入門してみた - Qiita
  • 千円を崩す方法(Haskell)

    次のような問題を考えてみましょう: 千円を両替して崩す方法は何通りあるだろうか.ただし,一円玉,五円玉,十円玉,五十円玉,百円玉,五百円玉を自由に(好きなだけ)使って良いものとする. まず問題を一般化し,つぎのように考えます.によって「円を一円玉で崩す方法の数」を表すことにします.(と言ってもならば常になのですが). また,によって「円を一円玉と五円玉で崩す方法の数」を, によって「円を一円玉と五円玉と十円玉で崩す方法の数」を, によって「円を一円玉と五円玉と十円玉と五十円玉で崩す方法の数」を, によって「円を一円玉と五円玉と十円玉と五十円玉と百円玉で崩す方法の数」を, 最後にによって「円を一円玉と五円玉と十円玉と五十円玉と百円玉と五百円玉で崩す方法の数」を表すことにします. このように定式化すると,クイズの答えはと表されます.あとはこの具体的な数値を求めれば良いわけです. さて,はを「n

    千円を崩す方法(Haskell)
  • C++の入門書を書くためにHaskellを学ぶことにした

    C++17の参考書、江添亮の詳説C++17はすでに書き上げて、来年の出版を待つばかりになっている。 https://github.com/EzoeRyou/cpp17book 次に書くC++の入門書にしようと思っているが、入門書を書く前に、少し時間をかけてHaskellを学ぼうと思っている。 なぜHaskellを学ぶのか。Pandocのためだ。 Pandoc 私のは、Markdownで書いてPandocで各種フォーマットに変換している。アスキードワンゴでは、Pandocを使ってlatexに変換した上で、手作業で出力されたlatexを編集して組版している。つまり、私の参考書の執筆はPandocに支えられていると言ってよい。 さて、アスキードワンゴ編集部(ドワンゴ)は私がを出版契約している出版社であり、かつ私が雇用契約している会社でもある。アスキードワンゴの編集者は私の編集者であり同僚

  • goな関数 - あどけない話

    これは「Haskell (その2) Advent Calendar 2017」の1日目の記事です。遅くなってすいません。 読者として末尾再帰ぐらいは理解しているHaskellerを想定しています。 トップレベルとローカル関数 再帰を用いて関数を書いているとき、トップレベルで再帰するか、ローカル関数で再帰するか、ときどき迷う。この記事では、僕なりの判断基準を示したい。 Data.Listで定義されている再帰が必要な関数は、ほとんどがトップレベルで再帰している。代表例のmapの例を見てみよう。 map :: (a -> b) -> [a] -> [b] map _ [] = [] map f (x:xs) = f x : map f xs mapをローカル関数を使う実装にしてみよう。この記事では、ローカル関数名としてgoを用いる。(loopを使う流儀もある。) map' :: (a -> b)

    goな関数 - あどけない話
  • cl-vs-haskell.3

  • PatternSynonymsのススメ - あどけない話

    PatternSynonymsは、その名の通り、パターンの別名である。GHC 7.8.1 で導入された。GHC 7系のPatternSynonymsは、モジュール内に閉じて入れば何の問題もなかったが、モジュールの外へexportする際は、patternキーワードが必要であり、構成子らしくなかった。 {-# LANGUAGE PatternSynonyms #-} module A (Foo, pattern Zero) where newtype Foo = Foo Int pattern Zero :: Foo pattern Zero = Foo 0 GHC 8 からは、patternキーワードが不要となり、構成子らしくなった。 {-# LANGUAGE PatternSynonyms #-} module A (Foo(Zero)) where newtype Foo = Foo I

    PatternSynonymsのススメ - あどけない話
  • 思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8

    JJUG CCC 2017 Spring の発表スライドです。Haskell 互換なふたつの JVM 言語 Frege と Eta について、モナドを利用した Java ライブラリ呼び出しの技法を解説します。 関連ブログ記事 : http://ccvanishing.hateblo.jp/entry/2017/05/21/150903

    思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
  • 基本の基本〜私のためのHaskell〜総集編 - ryamadaのコンピュータ・数学メモ

    まとめるには、もう少し時間がかかる。。。 Haskellの基の基のき 原子のような要素とそれを関数で組み合わせたものとをひと塊として捉えている 型は整数型のような要素的なものもあり、それを足し算と掛け算のルールで複雑にしたものも型とする。代数的型と言う。代数式で表される点が「関数」である。その定義自体が「関数」である 型クラスも、単独の型を原子的要素とし、複数の型の集合に型クラスという共通名をつけ、さらに型クラスを統合して、新たな型クラスを作れるが、「単独の型」を「単独な型クラス」と見れば、この構成の仕方は、型の仕組みと同じ。この構成をするときも「関数」で定義する 共通点でまとめよう、という意識がある 複数の型に同じ名前の関数を適用したい、しかも複数の関数をセットで適用したい。これをする仕組みが型クラス。「集合」として考えているし、その集合・亜集合が「関数」で定義されている。集合・べき

    基本の基本〜私のためのHaskell〜総集編 - ryamadaのコンピュータ・数学メモ
  • 私のためのHaskell〜 [] リストを理解する その2 - ryamadaのコンピュータ・数学メモ

    だんだんに性質を付与する リストには、Functorという型クラスの性質と、Applicativeという型クラスの性質とMonadという型クラスの性質が付与されていた。 この3つの型クラス、その性質はには順序がある。 Functor型クラスの性質が1番はじめで、次がApplicative、その次にMonad、という順序である。 その順序は、Applicative型クラスの定義において、Functor型クラスであることが前提になっていること、Monad型クラスの定義において、Applicative型クラスであることが前提になっていることが以下の宣言から読み取れる。 class Functor f where class Functor f => Applicative f where class Applicative m => Monad m where 結局、リストは 要素ごとに関数を適

    私のためのHaskell〜 [] リストを理解する その2 - ryamadaのコンピュータ・数学メモ
  • 私のためのHaskell〜 [] リストを理解する - ryamadaのコンピュータ・数学メモ

    リストの手前と、リストの定義 Haskellの「大元」というのがある それをコンパイルしないと使えないので、コンパイラがあるが、GHCはそのひとつ GHCコンパイラは複数のモジュールファイルを持っていて、その定義がGHCによるコンパイルで使われる 基的にはHaskellの大元にGHCコンパイラのルールを乗せたもので、プログラミングのルールが決まっていると考えてよい(ようだ) このほかに、Preludeというモジュールもある。これはGHCのモジュール群にさらに追加されたもの リストの型定義 型として定義されている。それはGHC.Types.hs モジュールファイルの中 data [] a = [] | a : [a] これだけ 何でもよいが、ある型を型変数 a で表したときに、型「リスト、記法としては 」は、空リスト ()もしくは、同じ型を要素として、連結されたもの。と書かれている。 この

    私のためのHaskell〜 [] リストを理解する - ryamadaのコンピュータ・数学メモ
  • 基本〜私のためのHaskell〜総集編 - ryamadaのコンピュータ・数学メモ

    Haskellの基の基を運用するにあたって設定されている仕組み〜これもプログラミング上は基 型はグループ化される その1 型のそれぞれを要素とする型集合がある。特徴を共有する型を亜集合として取りまとめる。その亜集合を型クラス・クラスと呼ぶ。 その2 型を「代数式」で作り上げていくときに、「式」の項は「型」なわけだが、その「型」に代数変数(型変数)を使うことで、「同様の式で表される複数の型」をグループ化できる 実例がないとわかりにくいので示す。 IntかFloatかの違いはあるが、以下の2つの型"HogeInt"と"HogeFloat"はよく似ている。 data HogeInt = KogeInt Int Int data HogeFloat =KogeFloat Float Float このようなとき data Hoge a = Koge a a のようにして作ると、"a"にIntを

    基本〜私のためのHaskell〜総集編 - ryamadaのコンピュータ・数学メモ
  • Haskell パッケージをstackで - ryamadaのコンピュータ・数学メモ

    HaskellではMCMCベイズ推定をモナドで実装できるらしい その論文がこちらで、それを実装しているHaskellパッケージ monad-bayesがこちら そのパッケージのインストールは、Haskell-stackを入れてやるのがよいらしい パッケージの依存関係を調べて、入れてくれるらしい 以下、Ubuntu 注意事項:stackの入れ方によっては、古いのが入って、そこにパスが通ってしまい、その後、アップグレードをしているつもりなのに、アップグレードされたバージョンが動かない・・・とか言う事態に陥ったりする模様 wget -qO- https://get.haskellstack.org/ | sh stack upgrade gitでパッケージを取ってくる git clone https://github.com/adscib/monad-bayes.git とれてきたフォルダのトッ

    Haskell パッケージをstackで - ryamadaのコンピュータ・数学メモ
  • Haskell、OCaml、RacketでGCのレイテンシを測る | POSTD

    James FisherはGHCのランタイムシステムが彼らのHaskellのプログラム上でレイテンシに悪影響を及ぼしたケースを、ブログに投稿しています。 低レイテンシ、大きなワーキングセット、そしてGHCのガベージコレクタ:3つのうち2つを選べ この記事では、その問題(基的に、レイテンシはコピー時間の影響を受ける)を示す非常にシンプルな合成ベンチマークを提案していて、さらに「50ミリ秒のレイテンシは過剰」と言っています。それで、他のGCがどのようにこの問題を処理しているかを見るため、OCamlとRacketで合成ベンチマークを再現したら面白いだろうと思いました。 細かい話は抜きにすると、要点は次のとおりです。OCamlのGCは古い世代にある大きなオブジェクトに関しては問題はありません。コレクションをコピーするのではなくマーク & スイープで処理するためで、このベンチマークではワーストケー

    Haskell、OCaml、RacketでGCのレイテンシを測る | POSTD
  • Haskell の QuickCheck を自動化する

    ライブラリを開発していると、複数のテストを一挙に回したくなるかもしれませんね。そんなときはこうします。 {-# LANGUAGE TemplateHaskell #-} import Data.List import Test.QuickCheck -- 与えられた2つのリストを連結する cat :: (Eq a) => [a] -> [a] -> [a] cat [] ys = ys cat (x:xs) ys = x : (xs `cat` ys) -- cat が結合律を満たすかどうかのテスト prop_cat xs ys zs = (xs `cat` ys) `cat` zs == xs `cat` (ys `cat` zs) -- 最初のリストから二番目のリストの要素を除去したリストを作る sub :: (Eq a) => [a] -> [a] -> [a] sub [] ys

    Haskell の QuickCheck を自動化する
  • TLS 1.3 開発日記 その7 0RTT - あどけない話

    これは、http2 Advent Calendar 2016の24日目の記事です。 この記事では、TLS 1.3 の4番目のハンドシェイクである 0RTT について説明します。 0RTTとは、アプリケーションが目的の通信を始めるまでに、下位の層でパケットのやりとりがないことを意味します。準備にかかる round trip time の回数が0回ということです。 TLS 1.3 では、0RTT が PSK ハンドシェイクの拡張として実現されています。TLS 1.3の最新のドラフトから0RTTの図を抜粋します: Client Server ClientHello + early_data + key_share* + psk_key_exchange_modes + pre_shared_key (Application Data*) --------> ServerHello + pre_s

    TLS 1.3 開発日記 その7 0RTT - あどけない話
  • TLS 1.3 開発日記 その8 開発メモ - あどけない話

    これは、http2 Advent Calendar 2016の25日目の記事です。 この記事では、HaskellでTLS 1.3を開発した際に難しかった点をまとめます。自分のための覚書です。TLS 1.3のみをフルスクラッチで書くと、そこまで難しくないのかもしれませんが、TLS 1.2以前と共存させるのは大変です。 足らない部品 TLS 1.2のコードが存在しても、TLS 1.3では TLS 1.2で利用されてない部品が必要です: RSA PSS PSS は PKCS#1 は異なるパディング方式の署名。RSAの公開鍵/秘密鍵自体は流用できる HKDF X25519 と X448 これらは、Haskell の cryptonite にすべて揃っていたので、少し(かなり?)手を入れるだけで利用できるようになりました。 拡張の再利用 TLS 1.3では、TLS 1.2 の2つの拡張を再利用してい

    TLS 1.3 開発日記 その8 開発メモ - あどけない話
  • GitHub - lotz84/haskell: A curated list of awesome things related to 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 - lotz84/haskell: A curated list of awesome things related to Haskell.
  • TLS 1.3 開発日記 その5 Hello Retry Request - あどけない話

    これは、http2 Advent Calendar 2016の12日目の記事です。 今日は、第2番目のハンドシェイクである HRR (Hello Retry Request)について説明します。HRR とは、サーバがクライアントに Hello を再要求し、フルハンドシェイクをやり直すハンドシェイクです。 以下に仕様のドラフトからHRRの図を抜粋します: Client Server ClientHello + key_share --------> <-------- HelloRetryRequest + key_share ClientHello + key_share --------> ServerHello + key_share {EncryptedExtensions} {CertificateRequest*} {Certificate*} {CertificateVerif

    TLS 1.3 開発日記 その5 Hello Retry Request - あどけない話