Haskell

Network.Qiita作りました!

去年暮れから仲間と4人でコツコツ作っていた、HaskellによるQiita APIラッパーをついにリリースしました!配布サイトはこちら http://qiita.com/items/a0e4d1a105b12467850fこういうライブラリを公開するのは初めてです。誰かの役に立つと嬉しいですね〜

YesodでHTML/JavaScript/CSSを共通化する

Webアプリを作ってると、HTML/JavaScript/CSSを共通化したくなることがあります。 Yesodでは、これはWidgetって仕組みを使うようです。なお今回出てくるコードは全て、scaffoldで生成されたソース群がある環境を前提にしています。 Widgetとは? Widgetにつ…

MacでHerokuにYesodを(Herokuに公開編)

さていよいよYesodアプリをHerokuに公開します。 ただ、当然ながらHerokuにアカウントが必要なので、作業はそこからスタートです。相変わらずUbuntu on VirtualBoxで作業します。 HerokuにSign Up これはHerokuのサイトから簡単に出来ました。ちなみにHeroku…

MacでHerokuにYesodを(Yesod導入・アプリビルド編)

前回cabal-installがインストール出来たので、いよいよYesodのインストール、更にアプリのビルドまで行ってみましょう!相変わらずUbuntu on VirtualBoxで作業します。 yesodのインストール cabal-installがインストール出来たので、Yesodはこれを使って楽に…

MacでHerokuにYesodを(GHC/cabal-install導入編)

前回Ubuntu on VirtualBox環境を作成したので、次はGHC。 更にYesod開発に必須のcabal-installもインストールしてしまいます。 GHCをインストール ここからはUbuntu on VirtualBoxでの作業。 まず依存ライブラリをインストール。 sudo apt-get install libre…

MacでHerokuにYesodを(Ubunto on VirtualBox導入編)

HerokuにYesodで作ったWebアプリを公開出来るという情報が! これはやるしかない!情報源はこちらです。 Haskell on Heroku - ごったく大感謝!ただ開発はMacで支障ないのですがHerokuに公開する実行ファイルはUbuntu 10.04の64bit版でビルドする必要がある…

Yesodでファイルアップロード

Yesodにもだいぶ慣れてきました。慣れるまではなかなかコンパイルを通せず苦労しますが、コンパイルに通りさえすれば意図通りに動かないということはまずありません。 YesodはHaskellの素晴らしさを見事に受け継いでいるな、と感じます。さて今回はファイル…

警告を消す・Warning: A do-notation statement discarded a result of type ...

do記法の中での警告 Yesodを書いているとdo記法をたくさん使うのですが、ときどき以下のような警告に遭遇します。 Handler/Root.hs:36:7: Warning: A do-notation statement discarded a result of type <型情報>. Suppress this warning by saying "_ <- ($…

Yesodにはまってると思いきやHaskellの文法にはまっていた

よくあるっちゃーよくあるんですが、Yesodを書いていてYesodの作法を理解していなくてはまっているのかと思いきや、実はHaskellの文法にやられていたという。今回はこんなエラーが。 Handler/Bbs.hs:7:19: The first argument of ($) takes one argument, bu…

Yesodで入力フォーム

Yesod Web Framework Bookの写経を始めて3日目くらい。 ついに入力フォームに至ったんですがここのサンプルを写経すると私の環境では型エラーが起きました。ここまでは順調だったんですけどね。ちなみに私の環境のYesodのバージョンは以下の通りです。 $ gh…

モナドを書くときはdo記法が圧倒的に読みやすい

Haskellでモナドを使ったコードを書くとき、2つの書き方があります。>>=を使って真面目に書く方法とdo記法です。前回のYesodによるプログラムを例にとって両者を比較してみます。まずは>>=を使った書き方。 getUsers = getYesod >>= \users -> return $ aUs…

Yesodでサンプルを書いてみる

相変わらずYesodを触っていて、最近はサンプルを書いてみています。YesodはフルスタックなRoR風Webフレームワークということなので、本来はscaffold使ってDBやソースコードを自動生成して編集していくのが作法なのでしょう。でも本家サイトのサンプルは1フ…

Yesodサンプル

なにはともあれサンプルを書いてみる まずはサンプル。 {-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell , MultiParamTypeClasses, OverloadedStrings #-} import Yesod data HelloWorld = HelloWorld mkYesod "HelloWorld" [parseRoutes| / HomeR…

Yesodが動かない

Yesodがインストール出来たので、当然動かしてみるわけです。 Yesod in Five Minutesを見ながら最初のサンプルを作ってみたのですが・・・最後の最後、開発用サーバ起動コマンドに失敗するのです。 yesod develを実行すると dist/devel.hs:3:1: Failed to lo…

Yesodがインストールできた!

こないだこんなこと書いたのですが、cabalコマンドをsudoで叩くとインストール出来ました! sudo cabal install yesodこれでYesodで遊べるかも、と思うとわくわくします。

Haskellは型が先にある

Haskellの正規表現パッケージの使い方を見ていて、衝撃を受けました。 Prelude> :m Text.Regex.Posix Prelude Text.Regex.Posix> "abca" =~ "a" :: Bool True Prelude Text.Regex.Posix> "abca" =~ "a" :: Int 2 Prelude Text.Regex.Posix> "abca" =~ "a" ::…

Text.Htmlを使ってHTMLを出力

HaskellでCGIを作る、続きです。やはりCGIはHTMLを出力してこそ。でも文字列連結でHTMLを作るのはちょっとかんべん。 テンプレートエンジンをインストールしてもいいのだけど、GHCに付属しているText.Htmlというライブラリがあったので使ってみました。 Text…

HaskellでCGI

今、メインマシンのMacBook Airがありません。だからデスクの下の奥深くに眠っているUbuntuマシンを久々に引っ張り出してきました。 このマシンはサーバソフトの調査用に使っているのですが、今回はこのマシンを使ってHaskellでCGIを書いてみることにしまし…

HDBCとReaderTモナドを組み合わせてみる

HDBCでDBを操作するプログラムを書いていると、少なからずDB接続(IConnection)がうっとうしくなってきます。DB操作を行う関数は全て、引数にDB接続を取るからです。例えばCRUD操作を行う関数を書いたとします。 insertC c = runRaw c "insert into COUNTER…

HDBCを使う

さてようやくDB操作を実践出来ます。 せっかく導入に成功したHDBC-postgresqlですが、本エントリには出て来ません。DB操作はHDBCというパッケージで抽象化されているからです。 JavaでいうところのJDBCがHDBCで、JDBCドライバがHDBC-postgresqlに当たるわけ…

Haskellで書くときに欠かせないサイト

Hoogleが最重要!関数の名前での検索はもちろんですが、型で検索できるのが秀逸です。例えば (a -> b) -> [a] -> [b]で検索した結果がこちら。結果からはHackageDBというサイトのAPIリファレンスページへのリンクがはられています。 HackageDBはその名の通り…

HDBC-postgresqlが動いた

PostgreSQLを+universalでインストールし、x86_64とi386の両方に対応させたのが前回まで。 ちなみにGHCのライブラリのアーキテクチャを調べると、i386だったことが判明しました。 file /Library/Frameworks/GHC.framework/Versions/7.0.3-i386/usr/lib/ghc-7…

奮闘・HDBC-postgresqlを動かすための調査(その2)

「HDBC-postgresqlが使うdylibのアーキテクチャがちがう」と言ってエラーを吐かれてしまい、PostgreSQLへの接続どころか関数の実行すら出来ない でもCPUアーキテクチャもあdylibもx86_64で、一致している というところまでが前回。 調査を続けます。Googleさ…

HDBC-postgresqlに再度絶望する

前回HDBC-postgresqlのインストールに成功しました。 やっとDBアクセス出来る・・・のか?ghciの対話環境で接続を試してみます。 connectPostgreSQLという関数の第一引数の書式がよく分からんのですが、まずは適当に動かしてみましょう。 Prelude> :m Databa…

奮闘・HDBC-postgresqlのインストール(たぶん成功編)

ようやくのHDBC-postgresqlのインストールに成功しました。 もっとも動作確認まではやっていないので、まだ正しくインストール出来ているかどうかは分からないのですけれど。ちなみに環境は以下の通りです。 Mac OS X 10.6.8 GHC7.0.3 (Glasgow Haskell Comp…

奮闘・HDBC-postgresqlのインストール(その2)

前回HDBC-postgresqlをインストールしようとしましたが、エラーが出てインストールに失敗してしまいました。 解決に向けて少しは前進したいものです。しばし呆然とした後にエラーメッセージをよく見ると setup: The program pgconfig is required but it cou…

奮闘・HDBC-postgresqlのインストール

Haskellのパッケージのインストールには本当に苦労します。毎回これで挫折するんですよね。今回はHDBC-postgresqlをインストールしたいのですが、これがなかなか。 当方の環境がMacだからなのか、cabalでをインストールしようとしても失敗します。 やったこ…

HaskellでDBアクセスしたい!

本格的なプログラムにはWebAPIを叩くかDBアクセスのどちらかが必要・・・という独断と偏見により、HaskellでDBアクセスする方法を調査。実は、HaskellでPG組みたくなる度にDBアクセスを調査しては挫折しています。 ライブラリのインストール方法が分からない…

httpGetをさらにリファクタリング

HaskellでHTTPのGETリクエストを投げる話のつづき。 イマイチかっこよくないところを関数化するというアプローチを更に押し進めて、以下のような感じになりました。 import Network.HTTP import Network.URI import Data.Maybe httpGet :: String -> IO (Str…

昨夜書いたプログラムをリファクタリング

前回までと同じくHTTPのGETリクエストを投げるんだけど、ヘッダを追加してみました。 import Network.HTTP import Network.HTTP.Base import Network.URI httpGet2 :: String -> IO (String) httpGet2 url = do mayUri <- return $ parseURI url uri <- case…