- 2019-09-25 (Wed) 22:11
- 一般
「Haskell で typeclass を使う例を示せ」と言われて考えるも,どこかしら無理が生じるという罠にハマる今日このごろ.
「もらった式の型を文字列で返す」という関数 getTypeName :: a -> String を備えたクラスとかイイんじゃねとか思ったけれど,リストを考えると空リストで悩ましいことに気づいた.要素がないので getTypeName に渡すべき a 型の式がない.ScopedTypeVariables を入れつつ where x = x :: a とすれば a 型の x が使えるようになるのだけど…… ビミョウ.
「何でもかんでもリストに flatten するぜ」な型クラスを考えたら multiple parameters で functional dependencies 使わんとあかんし……
「何でもかんでも和を取るぜ」な型クラスを考えつつ「文字列のときには "one" って書いたら 1 だと思ってほしいな」とか思ったら String = [Char] だから [a] のインスタンス(要素和を取る素直なもの)と被って {-# OVERLAPPABLE #-} とか書かなきゃならなくなるし…… (一番上の例でも生じるけど)
「〇〇というデータ構造」というクラスだと〇〇が理解できないというオチが待ってるので悩ましい.ヒープくらいならなんとかなるかな……
など,とても悩ましい.
- Newer: ことはじめ