タグ

Haskellに関するterazzoのブックマーク (185)

  • 実世界を扱う依存型プログラミングのたぶん基本~外界から安全な世界までの道 - ぼくのぬまち 出張版

    依存型ならさらに安全にプログラミングできちまうんだ!と言ったところで,「無料で遊べちまうんだ!」とか「3000円払えば無料で10連まわせる」みたいな感があり, 依存型使わない場合とどう違ってくるのか 入出力から扱い始めるとどういった形のプログラムになるのか 大概どういう流れでプログラミングすることになるのか とか,そういった話を通しではそんなに見ないかなーという気がしたので,ごく基的なものを一通りまとめておこうと思って. まず,説明に使う問題設定について.行列演算,特に行列積を考えてみる.ただし,行列の形(行はいくつ,列はいくつ)についてはプログラムの外から入力によって決定するような状況とする.これ自体は普通の問題設定だと思われる. 依存型を使わなければ特にどうということも無い.恐らく行列の型を次のように定義し, -- 形のみ持っておき,中身の数値については簡単のため省略 data Ma

    実世界を扱う依存型プログラミングのたぶん基本~外界から安全な世界までの道 - ぼくのぬまち 出張版
  • 入門的ではない型クラスの話:Haskellの型クラスがぁ (´^`;) - 檜山正幸のキマイラ飼育記 (はてなBlog)

    タイトルに「入門的ではない」と入れたのは; 先日の「関数型プログラミングとオブジェクト指向について、何か書く、かも」において、「型クラス入門」の記事を書くかもと予告じみたことを言ってしまったので、その入門じゃないぞ、と。でも、型クラスの話だぞ、と。そういう意味合いです。ヨロシク、アシカラズ。 型クラスの元祖はHaskellです。なので、「型クラス = Haskellの型クラス」という前提での解説が多いみたいです。しかし、元祖は“最初の試み”であるがゆえに、使用経験や後発の理論を活かすことが出来ず、むしろ問題をかかえていたりします。Haskellの型クラスも、なんだか残念なところが。 内容: オーバーロードと人生 型クラスは何がうれしいのか(オーバーロードなしでも) 型クラスの実際 記号の乱用の実装法 Haskellの型クラスは何がマズイのか オーバーロードと人生 型クラス誕生の動機は、演算

    入門的ではない型クラスの話:Haskellの型クラスがぁ (´^`;) - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2016/10/01
    newtypeを使うんだっけかな>もってまわった
  • Twitterを巡回していてわかったHaskell初心者が躓きやすいポイント8つ

    最近の趣味は「Haskellはいいぞ」と呟くかTwitter Search: Haskellを巡回して を押して回ることです 毎日巡回しているとHaskellに入門しようとするも細かいところに引っかかって前に進めないでいる人をちらほら見かけます。今回はそんな見回りの知見を活かしてHaskell初心者が躓きやすいポイントをまとめてみたいと思います。 1. 入門書は何がいいの? それはもうすごいH一択でしょう!…と言いたいところですが時々不満の声を聞くこともあります。確かにすごいHこと『すごいHaskellたのしく学ぼう!』は世界一わかりやすいHaskell入門書であることは間違いないと思いますが、逆に内容が平易すぎるため記述が冗長だと感じたり読み終わっても何か自分で作れるようになった気がしなかったりするかもしれません。なので僕は「プログラミングも初心者でHaskellから入門してみたい」

    Twitterを巡回していてわかったHaskell初心者が躓きやすいポイント8つ
  • Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ

    CodeforcesやProject Eulerの問題には、無限リストをうまく使うと綺麗に解くことができる問題がたくさんあります。 数列の性質から探索範囲の上界を決めて解を探索することが多いのですが、きちんとした根拠を持って上界を決めることができることは少なく、余裕を持って十分に広い範囲で計算して解を求める解法がよく取られます。 Haskellの特徴である遅延評価とその洗練された糖衣構文を用いると、無限リストを簡単に扱うことができます。 上界を適当に定める解法よりも、より宣言的で美しく、時に効率的なコードで同じ解を得ることができます。 しかし、無限リストをきちんと、それも無限個の無限リストをきちんと扱うとなると、意外と苦労します。 この記事では、無限個の無限リストをソートされた形で結合する方法について説明します。 一般的な無限リストではなく、条件はかなり絞っていてます (そうでないと原理的

    Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ
  • 【型レベルWeb DSL】 Servantの紹介

    Note 2018-07-28: 最新の lts-12.2 で動くようにサンプルコードを修正しました。 Haskellは型の表現力がとても高い言語です。 型をうまく使えば意図しないプログラムがコンパイルできないように設計することが出来ます。ServantはWebアプリがどのように振る舞うかを型で設計するためのDSLです。APIと対応した型を作ることで間違いが少なくなるだけでなく様々なボイラープレートを型から生成することも出来ます。特殊な外部ファイル等は必要無く全てHaskellの文法で完結します。まさに型の表現力が高いHaskellでしか作れないライブラリです。 Servantの特徴としてチュートリアルでは以下の4つが挙げられています。 concision (簡潔である) flexibility (汎用的・柔軟性がある) separatation of concerns (関心の分離) t

    【型レベルWeb DSL】 Servantの紹介
  • 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 - あどけない話
  • Haskellでなぜストリーム処理ライブラリが必要なのか - fujimuradaisuke's blog

    関数型ストリーム処理勉強会で発表したので、ブログにも書いておきます。 元になった資料はこちら Haskellでストリームデータを扱う方法としては、Handleを使う方法、Lazy IOがありました。しかし、それぞれに問題があり、再利用性が高く堅牢なコードを書くことは困難でした。 この状況を解決すべく、Conduit、Pipes、io-streamsなどのストリーム処理ライブラリが現れたのですが、そもそもそれらが必要とされた経緯は具体的にはどのようなものだったのでしょうか? 元ネタ: http://okmij.org/ftp/Haskell/Iteratee/talk-FLOPS.pdf ソースコード: https://github.com/fujimura/functional-stream-processing-meetup-sample そもそもストリームとは 必要に応じて処理されるデ

    Haskellでなぜストリーム処理ライブラリが必要なのか - fujimuradaisuke's blog
  • 就職しました - モナドとわたしとコモナド

    日、Tsuru Capitalのポジションを得ました。 Tsuru Capitalはデリバティブの取引を行っている企業で、自動株取引の会社ではありません。取引に関わっている10人のメンバーのうち、創始者であるSimonを除く全員がHaskellerで、取引状況の分析や一部の取引の自動化など、あらゆるところにHaskellを使っているのが大きな特徴です。日では数少ない、Haskellをメインに使っている企業の一つでもあります。 東京、シンガポール、バンクーバーにオフィスがあり、東京には私を含む5人の開発者と事務担当、Simonと愛犬テトがいます。 オフィスはオランダヒルズ森タワーRoPにあります。設備が非常に充実しており、東京に引っ越すまではオフィスに週数度の頻度で泊まっていました。風呂上がりにジンジャエールをラッパ飲みしながらサーバールームの熱風で体を乾かすと、すごく気持ちが良いです。

    就職しました - モナドとわたしとコモナド
    terazzo
    terazzo 2015/10/08
    犬いいなー
  • Divisible型クラスやそのメソッドの名前の由来 - xuwei-k's blog

    数日前にDivisibleなどのことを書きましたが、その名前の由来について、気がついたことをメモ。 ContravariantやInvariantなApplicativeとscalaz.Equal, Orderとscalaprops.Cogenと各種シリアライザ―(scodec, argonaut, play-json, msgpack4z) そもそもContravariantなApplicativeなら「ContravariantApplicative」と呼べばいいだろ、とも思わなくないですね?それだと長いですが。 実際ekmettせんせーが最初に入れたときはDivisibleではなく、そういった違う名前だったようです。 以下、関連コミット 最初にCoapplicativeとして入れたコミット https://github.com/ekmett/contravariant/commit/

    Divisible型クラスやそのメソッドの名前の由来 - xuwei-k's blog
  • 関数型プログラミング言語 Haskellの新しいMac用IDE「Haskell for Mac」レビュー。

    関数型プログラミング言語 HaskellのMac用IDE「Haskell for Mac」を提供していただいたので使ってみました。詳細は以下から。 昨日 関数型プログラミング言語 Haskell のMac用ネイティブIDEとなる”Haskell for Mac”(Mac App Storeでの登録名はHaskell)がリリースされましたが、この記事を書いたところ開発者のManuel Chakravartyさんからプロモーションコードを送っていただいたので初心者ながら使用してみました。 Overview Haskell for Macのメインウィンドウは”Project Navigator”, “Editor”, “Playground”, “Console”エリアから構成されており、各エリアは表示・非表示が可能で書いたコードはAppleのSpriteKitを利用して直ぐにPlaygroun

    関数型プログラミング言語 Haskellの新しいMac用IDE「Haskell for Mac」レビュー。
  • 関数型プログラミング言語 Haskell用のIDE「Haskell for Mac」が8月25日にリリース予定。

    プログラミング言語 Haskell用のIDE「Haskell for Mac」が8月25日にリリース予定だそうです。詳細は以下から。 関数型プログラミング言語として有名なHaskellの統合開発環境”Haskell for Mac”は今年5月からベータユーザーを募って開発を続けてきたMac用アプリですが、そのHaskell for MacAppleのレビューを通過し明日リリースされるそうです。 Haskell for MacAppleのSpriteKitフレームワークを使用し計算結果を画像やアニメーションなどにして表示してくれる機能がありベータテスターのレビュー[1, 2, 3]は好評のようなので、興味がある方はHaskell for MacTwitterGoogle+アカウントをフォローしておくことをお勧めします。 Playgrounds are ideal to explore

    関数型プログラミング言語 Haskell用のIDE「Haskell for Mac」が8月25日にリリース予定。
  • 就職しました - 純粋関数空間

    前の記事を書いてから随分時間が開いてしまいましたが、 今年の二月の終わり頃に、Tsuru Capitalというところに就職しました。 この記事を見てかどうかはわかりませんが、先方からお誘いいをただいて、 これは渡りに船とばかりに働かせていただくことになりました。 いろんな方にご心配をいただきまして、大変ありがとうございました。 身体面の健康も随分良くなりまして、今では元気に暮らしております。 Tsuru Capitalは自動株取引の会社で、ご存じの方はあまり多くないかもしれませんが、 Haskellでシステムを開発していて、日国内に数えるほどしかないHaskellで仕事できる会社の一つです。 当然ながら、私も毎日Haskellを書いています。 会社で働いてる人もほぼ全員Haskellが書けます。 なんというか、Haskellで開発しているからそれは当たり前なんですが、 これが当たり前って

  • Haskellのビルドツール"stack"の紹介 - Qiita

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

    Haskellのビルドツール"stack"の紹介 - Qiita
  • 「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita

    Haskellだと問題1が一番難しいともっぱらの噂の問題をやってみました。 問題1 forループ、whileループ、および再帰を使用して、リスト内の数字の合計を計算する3つの関数を記述せよ。 再帰のコードが一番簡単なので、まずはそれから。 ではついに一番難しいforループとwhileループのコードを書いてみましょう。 まず問題になるのが、Haskellにはfor文もwhile文もないというところです。まずはforループを作らなければなりません。そもそもforループ、whileループというのが、何を示すのか?というのがあんまり自明ではないのですが、C言語でのforループとwhileループだと考えましょうか。 for :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m () for init cond incr body

    「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」をHaskellでやってみた - Qiita
  • プログラミングHaskellのfoldr, foldlの説明が秀逸だった件 - あと味

    今年はHaskellを勉強しています。 土日などを利用して、すごいHを3〜4週間かけて読み終えました。時間かかった分、記憶の密度が低くて、まだ理解度は低いです。 新しい概念を学ぶ時は、同じテーマのを何冊か読んで、当に読みたかったを再度読み直すというのが自分の学習の方法として定着しているので、今は、プログラミングHaskellを読み進めています。 すでに「ふつうのHaskellプログラミング」は読み終えていましたが、改めて読むと、当に普通のプログラミングに感じたので、すごいHがかなり刺激的で、よくできたなんだと思います。読み直す時が楽しみであります。 題 さて、「プログラミングHaskell」の話に戻りますが、foldrとfoldlの説明の箇所が秀逸だと思ったので内容を紹介してみます。*1 fold関数は、他の言語でreduceとかinjectとか呼ばれている関数ですね。個

    プログラミングHaskellのfoldr, foldlの説明が秀逸だった件 - あと味
  • https://qiita.com/hiyakashi_/items/86001cc53e66b6f10ffe

  • [翻訳] Haskellで生産的になる(Pythonから移行して) - Qiita

    Matthew Griffithさんのブログ記事 MECHANICAL ELEPHANT - Becoming Productive in Haskell comming from Pythonの翻訳です。そういえばProductive ProgrammerってにもHaskellを使って実証実験する話が出てました。Haskellは何度も勉強しようとして途中で止まっては忘れを繰り返しているので見習いたいと思います。 最近になってようやく私は生産性を高められるぐらいHaskellに熟達してきました。そこでHaskellを学習してきた経験について、それらを忘れてしまう前に私の考えを書き留めておこうと思います。今や私はWebプロトタイピングのほとんどをHaskellで行っています。まだ普段はPythonを使い、また楽しんでいるにも関わらず、です。 Data First(データが第一) これは動的

    [翻訳] Haskellで生産的になる(Pythonから移行して) - Qiita
  • 訃報: Haskell設計者Paul Hudak氏 | スラド デベロッパー

    純粋関数型プログラミング言語 Haskellの主要な設計者の一人として知られる米イェール大学教授のPaul Hudak氏が4月29日、白血病のため62歳で死去した(Yale Daily Newsの記事、 イェール大学の発表、 家/.)。 Hudak氏は2009年12月に白血病と診断され、2010年には幹細胞移植を受けていた。2013年1月までの闘病の様子は、The Yale Haskell GroupのHudak氏の個人ページに記載されている。6年近い闘病生活を続ける間もセイブルック・カレッジの寮長を務め、キャンパスでの活動にも積極的に参加していたそうだ。亡くなる数週間前にも、学生がHudak氏のために開催したアートイベントに参加しようとしていたという。

  • Re: Haskellの勉強で詰まってる部分 - maoeのブログ

    mizchi.hatenablog.com Haskellを習得する上で難しいポイントだと思います。大きく分けると次の二つにまとめられるのではないかと思います。 コードの中で現れる識別子からそれが何なのかを探しづらい Cabalがつらい それぞれ個人的な見解を書いてみます。 コード中の識別子の探し方 モナドのところの <$> とか <*> とか、え〜どっちがApplicativeで何がFunctorだっけ、そもそもその定義はなんだったっけ。え〜あ〜〜〜みたいになる。 と名前空間の そして名前で役割を推測することが困難な事が多々ある。mapM_ とか、前述した演算子とか。いや mapM_ は map があって mapM があって、っていう段階があるのは理解しているけど、ソース読んでて突然出現するそれには全く対応できない。 はどちらも識別子から型がわかれば大部分が解決します。ありがたいことに近

    Re: Haskellの勉強で詰まってる部分 - maoeのブログ
  • モノイドと継続渡しの道具箱 - モナドとわたしとコモナド

    関数型言語Haskellにおいて、普通は計算の結果は関数の戻り値として扱うが、「結果を受け取る関数」 に渡すという継続渡しというスタイルもある。これは単なる冗長なやり方ではなく、様々な興味深い性質を持つ。 基形は、aという値を渡すところを ∀r. (a -> r) -> r のような表現にする。たとえば、与えられた数の42倍を渡したいとき、そのまま\x -> x * 42ではなく、\x f -> f (x * 42)と書く。もちろんこれだけではありがたみが分からない。 さて、与えられた文字列の中のうち、大文字のアルファベットを取り出し、それがアルファベットの何番目か計算するプログラムを作りたい。普通はリストを使ってこのように書くかもしれない。 import Data.Char uppers :: [Char] -> [Int] uppers [] = [] uppers (x:xs) |

    モノイドと継続渡しの道具箱 - モナドとわたしとコモナド
    terazzo
    terazzo 2015/03/20
    575