Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/syocy/haskell-json-sample
A sample project to explain Haskell programming.
https://github.com/syocy/haskell-json-sample
Last synced: about 2 months ago
JSON representation
A sample project to explain Haskell programming.
- Host: GitHub
- URL: https://github.com/syocy/haskell-json-sample
- Owner: syocy
- License: bsd-3-clause
- Created: 2015-08-17T05:47:44.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-08-17T05:54:12.000Z (over 9 years ago)
- Last Synced: 2023-03-11T02:24:50.795Z (almost 2 years ago)
- Language: HTML
- Size: 148 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# haskell-json-sample
This small project is made to explain Haskell to my co-worker.
Most comments are written in Japanese.
## 概要
このプロジェクトはlivedoorが提供する天気APIを用いて、
指定地点の天気予報を取得するライブラリを提供する。また、ライブラリの利用例として東北の天気予報を
取得してファイルに書き出すアプリケーションを提供する。## 構成
```
├── src # 天気APIを使うためのライブラリ
│ ├── WeatherTool
│ │ └─── JsonScheme.hs # 天気APIが返すJSONの定義
│ └── WeatherTool.hs # ライブラリ本体
├── app # ライブラリを使うアプリケーション
│ └── Main.hs
├── test # テスト(未実装)
│ ├── Spec.hs # ユニットテスト
│ └── doctest.hs # ドキュメントテスト
├── haskell-json-sample.cabal # pom.xmlみたいなやつ
└── stack.yaml # Stackの設定(自動生成のまま)
```このプロジェクトは説明のためのプロジェクトなので、上記に加えて
Haddockで生成されたドキュメントを同梱している。* `.stack-work/install/x86_64-osx/lts-2.15/7.8.4/doc/index.html`
## ビルド方法
このプロジェクトはStackを利用して開発している。
StackはHaskellのワークアラウンド
(依存解決、ビルド、テスト、ドキュメント生成等)
を便利にしてくれるツールである。
特にStackageによってDependency Hell問題を解決してくれるところが嬉しい。ビルドにはまず Stack(0.1.2) を用意する。
Stackを動かすためには GHC-7.8.4 と cabal-install が必要である。
個々に導入するか、もしくは Haskell-Platform(GHC-7.8.4) を導入する。Stackがひとたび動けば、適切なGHCバージョンを
準備することすらStackがやってくれる。ビルドには以下のコマンドを実行する。
```
$ stack build
```ビルドしたものは以下のコマンドで動かせる。
```
$ stack exec haskell-json-sample-exe
```テストはまだ用意していないが、テストがあればは以下のコマンドで実行できる。
```
$ stack test
```HaddockはHaskellでいうJavadocみたいなものである。
今回は説明のため、自作ライブラリ分のHaddockはリポジトリに含めてしまっている。
Haddockは以下のコマンドで生成できる。
```
$ stack haddock --no-haddock-deps # 外部ライブラリのHaddockは生成しない
$ stack haddock # 外部ライブラリのHaddockも生成
```## 実行例
`stack exec haskell-json-sample-exe`を実行すると以下の内容の
ファイル(tmp.txt)が生成される。```
020010: 青森県 青森 の天気
今日 2015-08-17 曇のち雨
明日 2015-08-18 曇時々雨050010: 秋田県 秋田 の天気
今日 2015-08-17 曇のち雨
明日 2015-08-18 曇時々雨999999: *** Failure. ***
030010: 岩手県 盛岡 の天気
今日 2015-08-17 曇のち雨
明日 2015-08-18 曇時々雨060010: 山形県 山形 の天気
今日 2015-08-17 曇のち雨
明日 2015-08-18 曇り040010: 宮城県 仙台 の天気
今日 2015-08-17 曇のち雨
明日 2015-08-18 曇時々雨070010: 福島県 福島 の天気
今日 2015-08-17 雨時々曇
明日 2015-08-18 曇り
```## 使用している主なライブラリ
具体的な使用方法はソースコードのコメントを参照されたい。
* Lens
* データ構造へのアクセス(ゲッター、セッターなど)を超簡単に行うためのライブラリ。
* Wreq
* HTTPリクエストを行うためのライブラリ。レスポンスのデータ構造はLensでアクセスされるように作られる。
* Conduit
* HaskellのLazyなIOはリソース管理などの面で問題がある。その辺りを解決するためのライブラリ。