haskell-ja > Archives > 2016/03/24

2016/03/24 01:55:03 UTCikegami__
#
data Foo = Bar1 | Bar2 | ... | Bar 123456
  deriving Enum
と、たとえば、型コンストラクタがたとえば 123456 個あるとき、
型 Foo から個数 123456 をどうやって取り出したらいいのかな。
(magicぽい)
#
例えば maxBound=123456 を書いた上で deriving Bounded するのだろうか…
プログラミングしているときに、気軽に型 Foo を変更したとき、コンストラクタの個数をうっかりしたくないという背景です。
#
Bar 123456 は Bar123456 の間違いです(空白はとる)
#
Template Haskell をつかう?
#
data Foo =
    Bar --^ 0
  | Baz --^ 1
と書いていますが、かなしみがあります
2016/03/24 02:05:45 UTCikegami__
#
何が何番であるか、はプログラマが保証すべきことはわかりますが、ぜんぶで何個あるかくらいは取り出すことができてほしい
#
だめかなあ…それもプログラマが保証すべきような気もしてきました(書いてみるとじぶんの考えが整理されてくる)
2016/03/24 02:09:15 UTCruicc
#
data Foo = ...
#
makeLength ''Foo とかTHで関数を生やすくらいしかないような気がします
2016/03/24 02:13:39 UTC[1..100]>>=pen
#
コンパイル時の話なんですよね。動的なら length $ enumFrom Bar1 とか。
2016/03/24 02:16:09 UTCruicc
#
関数生やす系はもっと便利に使っていい気がする。THだけど。derivingも関数生やしてるようなものだし。
2016/03/24 02:20:30 UTCruicc
#
DeriveAnyClassあたりで出来るだろか
2016/03/24 02:40:27 UTCikegami__
#
deriving Bounded はぼくの勘違いです maxBound :: Foo だったから、個数はわからない
2016/03/24 02:43:03 UTCruicc
#
deriving (Lens)はまだですか
2016/03/24 02:53:24 UTCikegami__
#
generic-deriving パッケージで簡単にできました
https://www.reddit.com/r/haskell/comments/3txy65/better_deriving_of_enum/cxa8yjn
https://hackage.haskell.org/package/generic-deriving
#
ruicc さんの DeriveAnyClass のヒントからぐぐりました、ありがとうございます
#
generic-deriving のソース見るかあ
2016/03/24 03:26:04 UTCikegami__
#
[1..100]>=pen さんの方法でもいいのか、先頭をしっていれば同じことですね、なるほど
2016/03/24 03:32:08 UTC[1..100]>>=pen
#
4月12日(火)「平日夜にすごいH本をちょびちょび読む会 29回目」(定員5名) #Hちょびよみ http://hchobi.connpass.com/event/29107/