worksap-ate/aws-sdk — pull request #60 by daimatz (2012-11-06 05:45:26+00:00)
Title: データ変換関数を書くのが面倒なので TemplateHaskell で生成しましょう。

```haskell
data RouteState = RouteStateActive | RouteStateBlackhole
deriving (Show, Eq)
```

というデータに対して

```haskell
routeState :: Text -> RouteState
routeState t
| t == "active" = RouteStateActive
| t == "blackhole" = RouteStateBlackhole
| otherwise = err "Route State" t
```

みたいな変換関数をいちいち書くのは面倒なので、例えば

```haskell
mkConvertFunc "routeState" RouteState ["active", "blackhole"]
```

とかしたらその関数を生成してくれるようにしましょう。

引数に与える順にコンストラクタが対応しているとする。
例えば上の例では

```haskell
["active", "blackhole"]
```

の順なので

```haskell
data RouteState = RouteStateActive | RouteStateBlackhole
```

の `RouteStateActive` が `"active"` に、 `RouteStateBlackhole` が `"blackhole"` に対応する。