Я новичок в Haskell, и при создании простого проекта я столкнулся с этой странной проблемой.
У меня есть список функций, например
[f1, f2, f3 ... fn]
, который не работает, потому чтоу них нет того же типа.У некоторых есть Ct -> String
, Ct -> Double
и Ct -> Maybe Double
. Я хотел применить только такие функции
[f1, f2, f3 ... fn] <*> [v1, v2, v3 ... vn]
, где все v
имеют одинаковый тип Ct
Эту проблему легко решить, просто используя списки с такими кортежами, как
[(f1 a, f2 a, f3 a ... fn a) | a <- [v1, v2, v3 ... vn]]
, которые будут выглядеть примерно так:
[ (f1 v1, f2 v1, f3 v1, f4, v1 ... fn v1)
, (f2 v1, f2 v2, f3 v2, f4 v2 ... fn v2)
, ...
, (fn v1, fn v2, fn v3, fn v4 ... fn vn)
]
, но n
- это довольно большое число, где вам нужно определить отдельный экземпляр шоу, чтобы напечатать их на терминале, что я и хочу сделать.
Я знаю несколько способовПреодолеть эту проблему можно, используя кортежи, но разделяя результаты на более мелкие порции, но мне было интересно, есть ли способ определения типа данных, который может инкапсулировать несколько типов данных и при этом сохранять «идиоматичность» и читаемый код прикладного стиля?