スーパータイピング
hypersetって何?なレベルなのだけど。;-)Set uかuかによってアルゴリズムが違うのでタイプクラスを使わないとできなさそう。
マルチパラメータタイプクラスを使わずにできるだろうか?
問題
f :: k -> A a -> B
k として型 a または C a をとれるような関数fを定義せよ。
- 解答(もどき)1
まずElmとタグをつけてともに生きる。Eitherよりは使いやすいが…
newtype Set a = Set [Elm a] newtype Elm a = Elm a data SupT a = Elm_ (Elm a) | Set_ (Set a) -- Elm, Setのタグを外したほうがいいだろうか? class SubT c where inject :: c a -> SupT a instance SubT Elm where inject = Elm_ instance SubT Set where inject = Set_ member :: SubT c => c a -> Set a -> Bool member = undefined