У меня есть тип данных для матриц, определяемых как Matrix a
. В большинстве мест в моей программе я использую его с любой строкой как Matrix String
или с другими матрицами, как Matrix (Matrix a)
.Общий метод, который расширяет его возвращаемый тип
Мне нужно написать функцию, которая заполняет содержимое матрицы в соответствии с определенными правилами. Для строковых матриц подпись будет:
pad :: Matrix String -> Matrix (Matrix String)
потому что каждая строка преобразуется в матрицу определенного размера.
Для матриц с другими матрицами из них, функция должна быть:
pad :: Matrix (Matrix a) -> Matrix (Matrix a)
, потому что в этом случае только размер внутренних матриц меняется.
Есть ли способ обобщить эти два? Я попытался это:
class Paddable b => Paddable a where
pad :: a -> Matrix b
, а затем объявляя String
и Matrix a
как Paddable
, но это не удается с очевидным «Не удалось вывести ... из контекста» ошибка, которая, как ожидается, как я не определить мой pad
чтобы покрыть все возможные значения b
.
Любые предложения здесь?