IT練習ノート

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

Haskell

Applicative Mabyeで条件分岐

なんらかのデータを取得する処理をして、あればそれを使い、なければ、別途データを取得する というロジックは、よくあるのではないでしょうか。 例えば、このような場合です。 import qualified Data.HashMap.Lazy as HML m = HML.fromList [("k1", "**"), …

Contravariant

Data.Functor.Contravariant covariant functor ~~> produce something contravariant functor ~~> consume something (>$) = contramap . const const :: a -> b -> a contramap :: Contravariant f => (a -> b) -> f b -> f a contrampa . const = x -> y …

Isoの使い方

lambda > import Control.Lens lambda > :t iso iso :: (Functor f, Profunctor p) => (s1 -> a1) -> (b1 -> t1) -> p a2 (f b2) -> p s2 (f t2) lambda > let foo = iso (\((a,b),c)->(a,(b,c)) (\(a,(b,c))->((a,b),c))) lambda > let foo = iso (\((a,b),…

Attopersecで無限ループをさせる簡単な方法

Infinite loop on Attopersec

JSONにLensでアクセス

JSON access by Lens

Megaparsecで状態を扱う

paserで状態を管理したい場合があります。 Attoparsec attoparsecでは、ライブラリ自体で、parser利用者側の状態を管理する仕組みがありません(間違っているかも)。なので、下記にあるとおり、StateTを使うことになります。 haskell - Does Attoparsec sup…

PolyperseのText.Perseの持ち上げ

Text.ParserCombinators.Poly.State パーサーで状態を扱いたいと思って、Polyperseを見ていました。Stete用のコンビネータがあるのですが、そのモジュールには基本的なコンビネータがないので、どうしたものかと思いました。Steteでも使えるようにText.Perse…

ドット力

Haskellはドット力が必要 Power of Dots

EDEでincludeする例

includeするファイルは良しなに読み込んでくれる。 An example of including template in EDE

EDEでカスタムの関数をつかう例

Custom function Example of EDE

stackでghciを使った時の履歴の場所

履歴はghci間で共有されているようです。 ghciに入りなにか入力する。 $ ghci GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help Prelude> xxxxxxx <interactive>:1:1: error: Variable not in scope: xxxxxxx Prelude> :q Leaving GHCi. stack ghciを起動し</interactive>…

HaskellでMySQLの地理情報を扱いたい(3)

GeoJSONでのやり取りもなんか出来てるっぽい。(未コミット) MySQL <--> GeoJSON <--> Haskell (Client driver + geojson library) GeoJSON communication between MySQL and Haskell

‘Distribution.Package’ does not export

geojsonパッケージをビルドした時に ‘Distribution.Package’ does not export ‘PackageName(PackageName)’ というエラーでビルドに失敗しました。 エラーになっているファイルはSetup.hsファイルです。 module Main (main) where import Distribution.Simple…

geojsonパッケージのインストール

aesonパッケージの上のレイヤでGeoJSONを扱うためのパッケージです。 geojson: A thin GeoJSON Layer above the aeson library hackageでは2018/02時点で、1.3.1ですが、hackageにアップロードされているモジュールと、githubにあるモジュールに差異があるよ…

HaskellでMySQLの地理情報を扱いたい(2)

いろいろなGeometryのselectと、insertのサンプル Geometry Type Sample on MySQL

HaskellでMySQLの地理情報を扱いたい

まだコミットできるレベルにないけど、検証コードはできた。 A point geometry sample on MySQL

Haskellで地理情報を扱うためにGeosパッケージのインストール(2018年02月時)

gitからモジュールを取得しておきます。 git clone https://github.com/ewestern/geos.git 開発中のライブラリから使用したいので、そのプロジェクトにて、普通にインストールしようとすると、geosライブラリが不足しているためエラーになりました。 $ cabal…

関数のコンテキストの型はユニークに解決される

言われてみれば当たり前なのですが、これに嵌りました。 Num型を複数とる関数があって、Int型やDouble型などいろいろパラメータに与えたかったのですが、コンパイルエラーがとれませんでした。問題点をシンプルな例で示すと以下のようになります。 Num型を複…

Haskellのドット演算子(.)

f . gと書いたときにgの結果がfに渡されるイメージで、Unixの|パイプに例えられます。 *> :t (.) (.) :: (b -> c) -> (a -> b) -> a -> c 表現は正確ではありませんが、渡される結果が「1つ」でなくても、ドット演算子は使えます。 > let f = undefined :: b…

GhcLintでコードをチェックする

結果集計 $ grep "^src" doc/wk_lint_result.md | cut -d " " -f 4- | sort | uniq -c | sort -r 18 error| Suggestion: Move brackets to avoid $ 8 error| Suggestion: Redundant $ 7 error| Suggestion: Redundant bracket 4 error| Suggestion: Avoid la…

HeteroMapのサンプル

a hetero-dict sample

HaskellでFPGAの最小のサンプル

入力を反転するだけのコード Not gate コンパイル $ stack exec -- clash --interactive CLaSHi, version 0.99 (using clash-lib, version 0.99): http://www.clash-lang.org/ :? for help Clash.Prelude> :cd ../worka Clash.Prelude> :! ls Clash01.hs Cla…

Haskellのドキュメント生成

haddockコマンド自体はディレクトリを指定してその配下にあるhsファイルを再帰的に処理してくれるオプションはないようです。xargsを使うのが手っ取り早いようです。 haskell - how to generate documentations with haddock? - Stack Overflow $ find . -na…

Implicit Parameters

Clashのプログラミングでサンプルを作り始めたところ、?変数名 :: 型というシグネチャが出てきました。 *> :t notM notM :: (?rst::Reset domain synchronous, ?clk::Clock domain gated) => Signal domain Bool -> Signal domain Bool Implicit Paremtersと…

2018/01時点のClash

Githubから取得してclashをインストールした場合、2018/01時点では、hackageにあるチュートリアルはのコード動かないようです。 CLaSH.Tutorial tutorialにあるソースをコンパイルするとパッケージがないとのエラーメッセージがでます。 Clash.Prelude> :l M…

clashのインストール (Mac成功 / Windows失敗)

clashのインストールをしています。 www.clash-lang.org Macではインストールができましたが、Windowsではできませんでした。 Macの環境 OS X Yosemite 10.10.5 The Glorious Glasgow Haskell Compilation System, version 8.2.1 stack 1.6.3 x86_64 hpack-0…

stack自体のupdateの作業ログ (2018年01月)

stack buildをすると、cabalのバージョン不整合のエラーがでました。 $ stack build Unable to parse cabal file: FromString "This package requires at least Cabal version 2.0" Nothing 確認すると不整合はなさそうです。 $ cabal --version cabal-insta…

cabal自身のバージョンアップの作業ログ (2018年01月時点)

cabalは2017年8月からバージョンが2になっています。アップデートをサボっていたので更新作業をしまし。 バージョンの確認とパッケージ情報の更新をします。 $ cabal --version cabal-install version 1.24.0.0 compiled using version 1.24.0.0 of the Caba…

2017年12月版 Windows10にHaskellをインストール

ghc,cabal,stackがインストールされます。。msys2も同時にインストールされます。なにも迷うことはありませんでした。むしろキャプチャとっているほうが時間がかかっていたかもしれません。 www.haskell.org

AttoparsecでN文字先読み

lookAhead関数をつかうだけ。 Peek many chars in Attoparsec.