IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Haskell

GHCやghciでワーニングを出さない

:set -w です。 stackoverflow.com

Haskellのテスト構成イメージ

こんなイメージ cabal | +--> TestSuite | +--> Tasty | +-(bridge)-> HSpec | | | +-(bridge)-> hspec-attoparsec | +-(bridge)-> QuickCheck 全体概要 unit-test-example/tutorial.md at master · kazu-yamamoto/unit-test-example · GitHub フレームワー…

Attoparsec の parseOnly は 残りにエラーがあったとしても、成功したところまでの結果を成功として返す

全部消費した上で判断したい場合はendOfInputを合成する。 gist.github.com

HUnit と Hspec の比較

gist.github.com

cabalのreplでテストスイートを使う

Haskellのテストをcabalで行う時は、下記のように実行します。(configureは毎回出なくて大丈夫ですが) % cabal configure --enable-tests % cabal build % cabal test テストコードを少し書くごとにcabal buildするのは、テストが蓄積されると時間がかかりま…

Int * Doubleは不可

> let a1 = 2 :: Int > let a2 = 3 :: Int > a1 * a2 6 > let b1 = 2 :: Double > let b2 = 3 :: Double > b1 * b2 6.0 > a1 * b2 <interactive>:1387:6: error: • Couldn't match expected type ‘Int’ with actual type ‘Double’ • In the second argument of ‘(*)’, nam</interactive>…

大文字小文字を区別せずにパースする

stackoverflow.com

JavaとHaskellのパースの違い

関数のパラメータ部分の解析を考えてみます。例えば、foo(1, 3, 4);の`(1, 3, 4)の部分をパースすることを試してみます。 仕様としては、 先頭にカッコ開き 末尾にカッコ閉じ 間に、カンマ区切りの数値 があるとします。 Javaの場合ですが、com.mysql.cj.xde…

fmapできない型

ProtocolBufferのパッケージ内にUtf8という型があります。 https://hackage.haskell.org/package/protoc… これは、StringBufferで表現されたデータが有効なUtf8であることを示した目印をつけたものです。 この、目印がつけられたデータに対して処理を考えた…

cabalでローカルにあるライブラリを使う

課題 ローカルに自作ライブラリのソースコードがある。 ライブラリ側の変更はない仮定(安定している仮定)。 そのライブラリを使うプログラムをローカルで作りたい。 ライブラリのソースコードとディレクトリは別にするが、cabalプロジェクトを作る。 ライブ…

RealWorld Example を触ってみる

Haskell Servant RealWorld Example App リポジトリの場所 Haskell Servant RealWorld Example App インストール サイトの手順の通り データベース >sqlite3 /tmp/haskell-servant-test.db < {your_path}/haskell-servant-realworld-example-app/scripts/sch…

ServantチュートリアルのBasic認証でIO

http://haskell-servant.readthedocs.io/en/stable/tutorial/Authentication.html チュートリアルだとユーザIDパスワードチェックのコードがハードコードされています。一見、どこでIOできるのかわからなかったので試してみました。 Servant Basic Auth by u…

ServantのルーティングでのIO

ServantでhandlerでのIOの取り回しのサンプルはWebに情報があるのですが、:>で記述していくルーティングでのIOの取り回しがわからず四苦八苦していました。 HasServerという型クラスでルーティングを記述していきますが、このクラス自体にIOが明示的にはない…

ghciの使い方

プロンプトを変える :set prompt "foo>" バンドされている情報を見る :show bindings foo>let x = 123 foo>let y = "abc" foo>:show bindings x :: Num t => t = _ y :: [Char] = _ foo> ロードされているモジュールを確認する :show module foo>:l MyWebApp…

ログのサンプル

a small sample (the smallest ?) of MonadLogger

Polynomialを整形して表示する

Math.PolynomialパッケージのPoly型のShowは内部構造をそのまま文字列表現するので、読みにくいときがあります。そこで、多項式を数式のように表示するサンプルを書いてみました。 polynomial: Polynomials

フェルマーの小定理のテスト

gist.github.com

TraversableからFoldableを求める

From Traversable to Foldable

DeriveFoldableの練習

FoldableであるにはFunctorであることが前提です。そのため、Derivingの対象となるのは、型の最後のパラメータになります。 a sample of deriving foldable

Record syntaxを使うときに設定しておくと便利な言語拡張

Record syntax を使うときに設定しておくと便利な言語拡張 DuplicateRecordFields フィールド名の重複を許す。ただし、曖昧になる場合はエラーになる。 Prelude> :set -XDuplicateRecordFields Prelude> data Foo = Foo {x :: Int} Prelude> data Bar = Bar …

cabalでのtest実行

ライブラリのテストを実行しようとしたらそのままではテストが実行できませんでした。 Servant-Serverをgit cloneして、cabal testしたら依存関係ライブラリがないと指摘されます。 (root)bar:servant-server foo$ cabal test Re-configuring with test suit…

Servant API の変遷

HasServerのroute関数の変遷 class HasServer layout where type ServerT layout (m :: * -> *) :: * route :: ********* version implementation 0.2.1–0.4.0 route :: Proxy layout -> Server layout -> RoutingApplication 0.5–0.6 route :: Proxy layout…

Haskellの名前空間をまとめる実装

下記のようなコードがありVertex3のドキュメントを確認しようとおもったのですが、上手くドキュメントが見つけられませんでした。 import Graphics.Rendering.OpenGL as GL GL.vertex $ (GL.Vertex3 (-1) (-1) 0 :: GL.Vertex3 GL.GLfloat) Graphics.Renderi…

OpenGL (GLFW-b)

下記のチュートリアルをGLFW-bに書き換える。 OpenGLTutorial1 - HaskellWiki Haskell OpenGL Tutorial Rewrite for GLFW-b

ServantのType Familiesの理解の準備

Sec 4.2 of Servant Paper

ServantのAPIからHandlerへの型の流れを確認する

Servantのチュートリアルでは、2.2.3でチートシートのように説明されています。 https://media.readthedocs.org/pdf/haskell-servant/v0.6/haskell-servant.pdf combinator handelrのパラメータ 補足 Capture “something” a a QueryParam “something” a Mayb…

Learn Physics の導入

Learn Physics learn-physics: Haskell code for learning physics stackでインストールしてみます。 bar:graphics foo$ stack new graphics-work01 Downloading template "new-template" to create project "graphics-work01" in graphics-work01/ ... The …

Servantでipadress取得のサンプル

Servant IP Address Sample

ServantのCSVファイルダウンロードのサンプル

Servant CSV download sample $ curl -i http://127.0.0.1:8081/csv/UNdata_Export_pork HTTP/1.1 200 OK Transfer-Encoding: chunked Date: Mon, 20 Jun 2016 16:12:16 GMT Server: Warp/3.2.9 Content-Type: application/csv "Country or Area","Year","Un…

HaskellのCSV読み込み

利用ライブラリ Text.CSV インポート Prelude> import Text.CSV 1行読み込み Prelude Text.CSV> parseCSVTest "aaa,bbb" [["aaa","bbb"]] Prelude Text.CSV> parseCSVTest "aaa,bbb,ccc" [["aaa","bbb","ccc"]] トリムはしない Prelude Text.CSV> parseCSVTe…