タグ

Haskellに関するt10471のブックマーク (170)

  • ContT を使ってコードを綺麗にしよう!

    はじめに Continuation (継続) について全く勉強したことが無いので Control.Monad.Cont で定義されている ContT とかいつ使うんだろうなーと思っていましたが、ついに利用機会がありました!!! 僕が考えたんじゃなくて fumieval さんに相談して、教えてもらったんですけどね。 問題のコード Yesod の Handler ではパラメータの取得するために lookupGetParam や lookupPostParam を利用すると思います。 実際にはこんな感じでパラメータを取得していくつか処理を行います。 deleteTestR :: Handler Html deleteTestR = do mParam <- lookupPostParam "key" case mParam of Nothing -> returnJson $ String "パ

  • [haskell] http-clientライブラリを利用してHaskellでHTTPクライアント機能を実装する

    プログラミング・IT関連。知っていると便利なこと、気になって調査したこと、はまったけど解決できたことなど。 Haskellでは、http-clientライブラリを用いることで、HTTPクライアント機能を簡単に実装できます。http-client以外にも何種類かライブラリがありますが、今回はhttp-client, http-client-tlsの機能と使い方をまとめておきます。 エントリで紹介するhttp-client, http-client-tlsライブラリの機能: 単純なHTTP GETリクエスト 主要な型の説明 Managerのカスタマイズ https proxy設定 タイムアウト値の設定 Requestのカスタマイズ ベーシック認証 リクエストヘッダ Responseの操作 ストリーミング受信 レスポンスヘッダの参照 エラーハンドリング 単純なHTTP GETリクエスト {-#

  • 素晴らしき HLint を使いこなす

    Posted on January 29, 2018 authored by Shinya Yamaguchi はじめに HLint は haskell-src-exts を使って実装されている静的解析ツールです。 HLint を使えば github などを使って PR ベースで開発する場合のコードレビューでこんな事を言わなくて済みます。 fromJust とかの部分関数は使わないで! maybe 関数って知ってる? この言語拡張って当に使ってるの? undefined まだ残ってるじゃん! 嬉しいことに Travis CI や CircleCI などで一度設定するだけなので導入もお手軽です! また、最近知ったのですが、プロジェクト内で使って欲しくない関数なども HLint によって検出可能です。 さらに、独学で Haskell の学習を進めている人は HLint が素晴らしい教師役とな

  • GHC Generic Programming と代数的データ型 - khibino blog

    Haskell Advent Calendar 2016 の 12日目のエントリーです。 代数的データ型と Functor Generic Programming は代数的データ型の構造を Functor の直積と直和のネスト構造に対応付けることで、 任意の代数的データ型に対する操作の記述を可能にする仕組みです。 まずは理解のために、より単純化した構造で考えてみましょう。 次のようなデータ型 ProdF f g a を考えると、 ProdF f g は Functor f および Functor g のもとで Functor になります。 これは、 もとの Functor のそれぞれの像の直積も Functor になる ということです。 ほぼ自明な内容ですが、 functor則を満たしていることを下に簡単に示してあります。 data ProdF f g a = ProdF (f a) (g

    GHC Generic Programming と代数的データ型 - khibino blog
  • HaskellのABC(Haskell Advent Calendar 6th) - モナドとわたしとコモナド

    Haskellといえば一文字変数名、一文字変数名といえばHaskellという{{要出典}}ほどにHaskellでは一文字の変数名がよく使われている。これは名前を考えるのをサボっているとは限らない。多相性によって変数が具体的な性質を持たないがゆえに、具体的な名前がつけられないというのが主な理由だ。あるいは、適切な名前があっても、既存の名前と被っているという場合もある。かといって完全なランダムというわけでもないので、一文字変数名はどのように選べばいいか考察していこう。 a よくある種: * アルファベットの最初であるaは汎用性が高い。型変数に使うのが王道だ。値レベルの変数として単体で使うことは意外と少ない。 reverse :: [a] -> [a] b よくある種: * aに続いて、bも型変数によく使われる。 map :: (a -> b) -> [a] -> [b] c 三つの値が与えられ

    HaskellのABC(Haskell Advent Calendar 6th) - モナドとわたしとコモナド
  • OverloadedLabels と Haskell Relational Record - khibino blog

    Haskell (その2) Advent Calendar 2017 の 18日目のエントリーです。 OverloadedLabels のレコードでの利用 GHC 8.0.1 以降では OverloadedLabels 拡張がサポートされたことにより、 適切な定義を追加しておくことで、レコードのフィールド名の衝突を気にせずに利用できるようになりました。 以下 user's guide の example のコードです。 {-# LANGUAGE DataKinds, KindSignatures, MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, OverloadedLabels, ScopedTypeVariables #-} import GHC.OverloadedLabels (IsLabel(..)

    OverloadedLabels と Haskell Relational Record - khibino blog
  • Light It ~てらし鬼~ 開発ヒストリー

    Light It の開発している間、開発の状況をまあまあTwitterでつぶやいたりしましたが、 まだ忘れていないうちに、開発中に起こったことや考えていたことを、時系列でまとめて残しておこうと思いました。 Light It 公式サイトはこちら これが最終的なトレーラーです。画質は1080pで見てほしいです。そうじゃないと雰囲気が伝わらないので。 ゲームの内容は、「敵に光を当てると止まる」という特性を利用しながらのステルスゲームです。 これができるまでをまとめてみました。 2016/1/14 - ゲーム製作開始! LightIt作り始めの日です。ゲームライブラリから作り始めました。protonic と名づけました。ゲームのプロトタイプ を作るためのライブラリだから。(これはもっと使いやすいように改造し、今後kurokoという名前で生まれ変わる予定です。) アイデアが降ってきたのでゲーム作ろう

    t10471
    t10471 2017/11/24
    すごい、自分ならだいたいライブラリ作る所で飽きる。。。
  • Free monad considered harmful

    haskell Published on September 27, 2017, last updated January 25, 2018 Now and then blog posts explaining and promoting use of free monads pop up, so for the sake of diversity I decided to write a post advising against free monads. What I’m going to tell is not new and there have been good comments on Reddit and in chats explaining downsides of free monads as basis of Haskell programs, but I thoug

  • HaskellとJSON、そしてレコード型 - syocy’s diary

    HaskellのJSON周りについて、こうやるのがいいんじゃないかという私の現在のやり方を書きます。 題材としては、 Swagger Petstore に記されている REST API にリクエストを投げてレスポンスを取り出すというのをやります。 (Swagger ですが scaffold は使わず自分で HTTP クライアントライブラリを使います)。 基方針は「出力は厳密に入力には寛容に」(出典失念) です。 もくじ JSONの前に: レコードのフィールドへのアクセス JSONの前に: レコードのデフォルト値 Haskellのデータ型→JSON JSONデータを含むHTTPリクエスト レスポンスにおけるJSONの扱い JSONの前に: レコードのフィールドへのアクセス Haskellのレコード型って、フィールドのゲッターがふつうの関数なのでレコードから値を取り出そうとすると f3 $

    HaskellとJSON、そしてレコード型 - syocy’s diary
  • 内包表記で生成したリストを2回使うと、スペースリークでシステムが停止してしまう

    円周率を近似するコードです。 main :: IO () main = do let points = [(x,y) | x<-range 10000, y<-range 10000] let all = length $ points let hit = length $ filter ((<= 1) . distance) points putStrLn $ show $ (fromIntegral hit * 4) / (fromIntegral all) where range n = (map (/ n) [0 .. n]) distance (a,b) = sqrt(a*a+b*b) このコードを実行するとメモリが大量に消費され、システムが停止します。何か問題があるようです。 しかし、hit だけを評価、あるいは all だけを評価すると、このコードは動作します。 main :

    内包表記で生成したリストを2回使うと、スペースリークでシステムが停止してしまう
  • Haskellは真面目なアプリケーション開発に向いている - syocy’s diary

    qiita.com ↑の記事で(主題ではないと思うものの)Haskellの批判に結構な分量が割かれていて、その批判のなかに「ちょっと違うんじゃないかな」という点がいくつかあったので反論ぽいことを書きます。 "Haskell は真面目なアプリケーション開発には向いてない"について これには多分いくつか事例を挙げればよくて、 Facebook ではスパム等の攻撃と戦うためのシステムを Haskell で作っています。 Fighting spam with Haskell | Engineering Blog | Facebook Code | Facebook (この記事を書いている Simon Marlow 氏は Haskell および GHC の主要開発者) より「アプリケーション」な事例が必要なら、プレゼンツールの Prezi を挙げることができます。 Case Study - Hask

    Haskellは真面目なアプリケーション開発に向いている - syocy’s diary
    t10471
    t10471 2017/05/20
    確かにあのころのYesodはビルドが辛かったとは思うし、Haskellのライブラリは結構カジュアルに互換性を崩すとは思うけど、他の言語(Ruby)とかでもある話の様な?
  • Typeclassopediaに足りない型クラス - xuwei-k's blog

    挙げようと思えばいくらでも挙げられるとは思うけれど、とりあえず自分が思ったものをいくつか挙げておきます。 Typeclassopediaという型クラスを色々紹介した有名な素晴らしいやつがあるのですが、それ少し古いし、もうちょっと紹介してもいいような型クラスが触れられてないぞ?というのを前から思っていたので、それを簡単に書いてみるという話。 https://wiki.haskell.org/Typeclassopedia http://snak.tdiary.net/20091020.html 今回挙げてないのが重要でない、これ以外知らない、というわけではなく、あくまでもなんとなくな基準です。 (好評だったら、続編を書く? or 他の人が書いてくれてもいい?) 以前こんなtweetしたけど、まぁやってくれそうな人いないし、言い出しっぺの法則ということで。 「typeclassopediaに載

    Typeclassopediaに足りない型クラス - xuwei-k's blog
  • Haskellライブラリ所感2016 - syocy’s diary

    (これは Haskell Advent Calendar 2016 の7日目の記事です) 今年使ったり調べたりした Haskell ライブラリを広く紹介していく企画です。 あくまで今年使ったものなので新しいものばかりではないです。 また記事の性質上、紹介するものが偏っていてもご容赦ください。 Hackage にはすごい数のライブラリが登録されていて、 頼もしいことですが目が回りそうにもなってしまいます。 この記事が Haskell のライブラリを調べる上での指針になったら幸いです。 なおこの企画と方向性が似ているものとして State of the Haskell ecosystem ( 2016年2月版 ) があります(英語)。 これは Haskell を取り巻く環境を知る上で非常によいドキュメントです。 ただ各ライブラリについては名前を挙げるだけにとどめられています。 この記事ではもう

    Haskellライブラリ所感2016 - syocy’s diary
  • Haxl/example/sql/readme.md at main · facebook/Haxl

    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

    Haxl/example/sql/readme.md at main · facebook/Haxl
  • Kleisli Functors

    Abstract: I define a typeclass for functors from Kleisli categories to Hask. This class turns out having more interesting properties than I expected, encompassing various Haskell patterns such as concurrency, and monad transformers. Monads are often described in terms of do notation. Every bind (=<<) equates to one statement in the do block. This is sufficient for explaining the usage of monads to

  • これから Haskell を書くにあたって

    2016/2/14 開催の第一回 hs.hs 勉強会で用いたスライドです。 流れは以下の通りです。 1. はじめに 自己紹介や発表の目的について 2. GHC 7.8 からの変更点 GHC 7.8 の前後で起きたライブラリの変化と、その変化への対処法について 3. Haskell が遅いと言われるワケとか 遅延評価や各種データ構造の内部表現に起因する諸問題と、その対処法について 4. 知らないと損する言語拡張たち 型の表現力を高めたり、計算速度を向上させる種々の言語拡張について 5. FFI の話 Haskell での FFI の扱いと、身近なライブラリから見る実装例について(※一部抜粋) 6. おまけ(その他便利グッズの話) あるとコーディングがある程度便利になる言語拡張について 一部訂正あり: http://qiita.com/func-hs/items/51b314a2323b83

    これから Haskell を書くにあたって
  • A Modern Architecture for FP

    It’s time. IO needs to die a horrible death. As functional programmers, we sometimes delude ourselves into thinking that functional code is always significantly easier to understand, more declarative, and more powerful. That’s just not true, as the following snippets should demonstrate: blahblah :: Boolean -> Boolean -> Boolean -> IO () blahblah b1 b2 b3 = ... def blahblah(b1: Boolean, b2: Boolean

  • 割とすぐに始められるextensibleチュートリアル(レコード編) - モナドとわたしとコモナド

    ごきげんよう諸君。今回はextensibleについて説明しよう。 extensibleはその名の通り、拡張可能なデータ構造を提供するライブラリである。具体的には、型レベルのリストによって特徴づけられる積と和を提供する。非常に残念なことに、GHC 8.0.1ではコンパイラのバグのせいでそもそもライブラリがビルドできない*1。来たる8.0.2では修正されているので、それを待つほかない。 とにかく、ここでは積の応用技である拡張可能レコードについて紹介する。使い方は簡単だ。まず使いたいフィールド名をスペースで区切ってmkFieldに渡す。 {-# LANGUAGE TemplateHaskell, DataKinds, TypeOperators, FlexibleContexts #-} {-# OPTIONS_GHC -fno-warn-unticked-promoted-constructo

    割とすぐに始められるextensibleチュートリアル(レコード編) - モナドとわたしとコモナド
  • 今から始める Lens/Prism

    2016 年の http://summit.scala-kansai.org/ で発表した資料です。Read less

    今から始める Lens/Prism
  • 翻訳:Haskellと過ごした4年間〜ファウンダーの観点から〜 - Qiita

    BetterというEラーニングの会社をやっていたCarl Baatzさん表題のような記事を書いていて、とても有益だと思ったので訳してみました。 だいたい逐語訳ですがところどころ意訳したり端折ったりしてます。プロの翻訳家ではないので間違いもあるかと思います。ご了承ください。不安なところは原文をご参照頂ければと。自信ないところは括弧に原文を残しているので、よい訳があれば編集リクエストお願いします。あと脚注も Thank you Carl for sharing great experince and knowledge! 原文: A founder's perspective on 4 years with Haskell http://baatz.io/posts/haskell-in-a-startup/ [追記] InfoQでもこの記事が取り上げられていました。 製品開発においてHask

    翻訳:Haskellと過ごした4年間〜ファウンダーの観点から〜 - Qiita