Haskell

実世界を扱う依存型プログラミングのたぶん基本~外界から安全な世界までの道

依存型ならさらに安全にプログラミングできちまうんだ!と言ったところで,「無料で遊べちまうんだ!」とか「3000円払えば無料で10連まわせる」みたいな感があり, 依存型使わない場合とどう違ってくるのか 入出力から扱い始めるとどういった形のプログラム…

stackを通してのコンパイルにとても時間がかかる条件

ghc 7.10 からみられるようになった現象で,放置しているうちにやや旬を過ぎてしまっている感もある話題なのだが,その後特に改善してるわけでもないのと最近踏まれたのを見たので念のために記しておこうかなと.コンパイル時間ghc-7.8で1分40秒なやつがghc-…

Hackageメタデータの依存関係だけ更新してどうするの?

(追記) cabal update で反映される模様?Agda-2.4.2.5のDependenciesで,unordered-containersを見て欲しい.依存関係が >=0.2.5.0 && メタデータのみをパッケージアップロード後に編集したもので,実際2016/1/25現在見えているメタデータはrev 1となってい…

stackで行く地獄巡りの旅

Haskell使い 十戒 一、常に型と共にあれ 一、不要な式より潰すなかれ 一、無益にIOするなかれ 一、つけられたらつけかえせ 一、つけられる前につけろ 一、一日一善 一、遅延を疑ってみよ 一、気を付けよ甘い型付けと暗い道 一、小さなコードで大きな仕事 一…

Travis CI等でstackのresolverにstackage latest nightlyを使う

stackでstackage nightlyのresolverを使おうとしても,stack.yamlには resolver: nightly-2015-10-27のように日付まで用意しないと使えない.lts-2やlts-3についても同様で,lts-3.*まで指定する必要がある.Travis CI等で各resolverについてマトリクステス…

Jinja2サブセット的な型付きテンプレートエンジンhaiji

年末年始なので何か作ろうかなと思いhaiji*1というライブラリを作ってみてる. まぁ,なんというか最近ansible*2よく使ってたこともあってイロイロ思うトコロあったりなかったり.大概のテンプレートエンジンにおいて,個人的にイマイチ気に入らないトコロは…

ロジックパズルの解説

この記事は Haskell Advent Calendar 2014 6日目の記事です.関数プログラミング実践入門 第6章 最終節にあるロジックパズルは,一体なにをどうやるとこのインターフェース設計になるのかという話.元々内容的に入門っぽくならないものないんだけど,特徴的…

パッケージを跨いだ再exportの危険性

この記事は Haskell Advent Calendar 2013 1日目後半の記事です.前半の記事もよろしく. 「ある露出モジュールAで隠蔽モジュールA.Xをimportし,AでA.Xのシンボルを選択的に(あるいはモジュールごと全部のシンボルを)露出させることで,AとA.Xを含むパッケ…

砂場遊びは地獄のかほり

この記事は Haskell Advent Calendar 2013 1日目前半の記事です.後半の記事もよろしく. cabal sandboxは便利だけどdep hellが無くなったわけではない.ほとんどにわかに見えなくなっただけだ.むしろsandboxに甘えて針穴通すようなbuild-dependsを書いてし…

cabal sandbox環境のpackage DBを参照する(改)

前回の記事は調査不十分だった.まず,sandbox環境では, cabal install --only-dependencies --enable-tests cabal configure --enable-tests cabal build cabal test を実行したときと, cabal install --enable-tests を実行したときで,config dist pref…

cabal sandbox環境のpackage DBを参照する

cabal-install-1.18 がきた.全国のHaskeller待望のcabal sandboxが使える.cabal-devさん今までありがとう.さようなら. この記事は余計なことをしている可能性があります! さて,テスト時にプログラムをビルドする必要があるとする.これは*.cabalファイ…

ghcjsをhardened profileのGentooにインストールするには

今年もよろしくおねがいします. 大晦日にghcjsのREADMEが更新され,ghc-7.6ベースになったり,これまで煩雑だったインストール作業がスクリプト化されたりするなど,いろいろと変更があった.実にはタイミングの悪いことに,このREADME更新が行われる直前,…

fluent-logger-haskell作った

なんかイマサラだけど,少し前にfluent-loggerのHaskell版と,そのconduitインターフェース版を作った. fluent-logger fluent-logger-conduit Haskellからfluentdにポンポンとイベントログ吐ける.以下,process-conduitとcsv-conduitでdstatの出力を吐き出…

Hackage2によるインハウスパッケージサーバを試す

この記事は Haskell Advent Calendar 2012 15日目の記事です. みんな何かヨサゲなもの作ったら hackage に upload してシアワセおすそわけしてると思う.ああ,すばらしきこのせかい.ユウジョウ!が,たとえば,オシゴトとかでソースをオープンにせずに Ha…

孤独のHaskell

孤独のHaskellに行ってきた.ので,感想とそのフォローアップになりそうなことを書く.とてもいい会だったように思う.遅刻して現場に付いたらRLEしてみようという例題("AABBCCC"を"A2B2C3"にする関数を書こう)をやっていて, id:khibino0 さんがおもむろに …

sigma.jsでhackageのパッケージ依存関係を視覚化する

sigma.jsを使ってみたかったので,hackageの(baseを除外して)パッケージ依存関係を視覚化してみた. 頂点(=パッケージ)数が多くてForceAtlas2による頂点配置がある程度安定するまでが長いしFPSも低い.でもまぁじっと待ってればそれなりになる.最初は各パッ…

Boost.Preprocessorを使う

ghcはC preprocessorを使える.となると,より一層強力なマクロを求めてBoost.Preprocessorを使ってみたくなるかもしれない.いや,やっぱそんなことないかもしれない.ともかくサンプルコード {-# LANGUAGE CPP #-} {-# OPTIONS_GHC -F -pgmF ./cpp.sh -I/u…

第4回 スタートHaskell2

第4回 スタートHaskell2でLightning Talkしてきた.LTとはいえ自分しか枠使う人いなかったので,ゆったり時間使わせてもらえた.主催陣に感謝.ちょうどIOの回だったので(というかここまで来るのを待ってLT枠もらったので),ごるふ場への勧誘という意図でふ…

ghc-modのflymakeエラーをミニバッファに表示する

(2014/04/05追記) この記事の内容はghc-mod-4以降では通用しなくなりました.私のようなNo Window派のEmacs使いにとってはエラー・警告がミニバッファに出てくれないと正直困る.もしかするとWindowモードではM-n/M-p時にポップアップとかしてくれてるのかも…

Gentoo Haskell Overlay 使うときの基本的な設定

最近なにやらDebian勢が「Haskell使うならDebian」と猛プッシュしてきててアレなので,Gentoo勢としての話を少々.Debian勢が現時点のcabalが持つ脆弱なhackage間依存性解決やcabalが干渉できないhackage外パッケージとの依存性解決をaptでカバーしているよ…

やったーHaskellの動くMySQLできたよー

やったー○○の動くMySQLできたよーシリーズ JavaScript mruby を見て.このネタは自分にもできそうだなーと思って,Haskellの式を評価するMySQL UDFを作ってみた.mysql-haskell-plugin mysql> select hs_eval('sum [1 .. 10]'); +--------------------------…

GTALibでTSP

GTALibでは,ライブラリ側の提供してくれるJoinListのGeneratorが「そういう形」になっているため,それらのGeneratorを使ってればDP化及び並列化がかかる.segs,inits,tailsなどはどれも組化リスト準同型で効率的に構成でき,これらのGeneratorもそのように…

puttyへの細工とoperational monadでputtyをマクロ操作する

私の昼間の仕事は残念なことにHaskellとはまだ距離のある分野であろう組み込み屋さんに分類される.当然シリアルコンソールを叩く機会が多い.ターミナルとしては周囲ではTeraTerm様が幅を利かせている.というかTeraTerm様以外を使ってシリアルコンソールに…

0 filledなN進数とListモナド上のmapM

Excess3の話.まぁ,endlessの問題で過去にも同じネタ使ってはいるが.割と使うくせにHaksellだと微妙に長くてgolfに困る0 filled N進数への変換.もしOctalやHexadecimalなら, import Text.Printf;printf"%08X"n とかで済むところだろうが.一応Numericにs…

第0回 スタートHaskell

第0回 スタートHaskellに参加…といっても第3部のLTから.第1部,第2部はとてもよいイントロダクションだったみたいですね.まぁ,第2部と違って演習じゃないし手ぶらでよいかなとノートPCは持ち込まず.会場入りして人数とMac Book率に驚く.改めてこういう…

ぶらり途中 Power Set の旅

Power Set久々に少しづつ刻んでいったので思考の変遷を辿る.まず,142byte.羃集合なので,脳直でそのままビットを調べて作っていた初版. main=interact$f.p.read f x='{':foldr1(&)x++"}" a&b=a++", "++b p n="0":[f[p(n-1)!!x|x<-[0..n],odd$i(`div`2)a!…

sleep sort?ってなんなのさ

Concurrentの練習がてらTLに微妙に流れてるsleep sortとやらを書いてみる. module Main where import Control.Monad(unless) import Control.Concurrent(threadDelay, forkIO) import Control.Concurrent.STM(newTVarIO, readTVarIO, readTVar, writeTVar, …

Horner法的な変形による数列総和の短縮

ゴルフでは常識に囚われてはいけないのですね! と,言いつつもタイムリーな問題が出てたので短縮パターンの紹介をしてみる.Horner法は次のような変形で, Haskellだとfoldで以下のように書く. -- f(x) = a0 + a1 * x + a2 * x^2 + ... + an * x^n f x=fol…

エラトステネスの小型高速遠心分離機

全国の Haskell使いのみなさん Golferのみなさん,縮みましておめでとうございます.今年もよろしくおねがいします. 今回の話題は2011年ということもあり素数問題御用達エラトステネスの篩.正直いろんな人がとり上げてるテーマだから本題のネタがかぶって…

Haskell Golf 入門

この発言 @dekosuke なんか 僕は最近全然 Haskell ゴルフをしていなくて腕が衰えていて悲しいので、 @notogawa さんあたりが解説記事を書いてくれないかと期待しています! [石持浅海先生講演会 11/6(土) URL ]2010-10-07 20:18:44 via YoruFukurou to @deko…