私はMatrix a
として定義された行列のデータ型を持っています。私のプログラムのほとんどの場所では、Matrix String
のような文字列か、またはMatrix (Matrix a)
のような他の行列と一緒に使用します。戻り値の型を拡張する汎用メソッド
特定の規則に従って行列の内容を埋め込む関数を書く必要があります。文字列行列の場合は、
pad :: Matrix String -> Matrix (Matrix String)
となります。各文字列は特定のサイズの行列に変換されるためです。
それらの他のマトリックスとマトリックスの場合、関数は次のようになります
pad :: Matrix (Matrix a) -> Matrix (Matrix a)
この場合、インナーマトリックスのサイズのみが変化しているからです。
これら2つを一般化する方法はありますか?私は私のpad
を定義しないと予想されるエラー、「文脈から...推測することができませんでした」Paddable
としてString
とMatrix a
を宣言し、その後
class Paddable b => Paddable a where
pad :: a -> Matrix b
と、これは明白で失敗します。私はこれを試してみました可能なすべての値b
をカバーする機能。
ここにはどのような候補がありますか?