Можно ли определить тип Haskell во время выполнения из данного шаблона? Вот что я имею в виду. Предположим, мне нужен целочисленный тип, который ограничен некоторым диапазоном (неизвестно точно во время компиляции). Я также хочу функцию, которая:Динамически генерировать типы Haskell во время выполнения?
succ 0 = 1
succ 1 = 2
...
succ n = 0
n
неизвестности во время компиляции. Я мог бы сделать что-то вроде этого:
data WrapInt = WrapInt {
value :: Int,
boundary :: Int
}
wrapInt :: Int -> Int -> WrapInt
wrapInt boundary value = WrapInt value boundary
Теперь то, что я хотел бы иметь, чтобы сохранить функцию wrapInt
, как это, но, чтобы избежать сохранения границы в качестве значения внутри типа WrapInt. Вместо этого я хотел бы, чтобы он каким-то образом хранился в определении типа, что, конечно же, означает, что тип должен определяться динамически во время выполнения.
Возможно ли достичь этого в Haskell?
Вы должны сохранить привязанный * где-то *. Если время компиляции неизвестно, то оно должно быть текущим временем выполнения, либо как поле структуры, либо передано как аргумент функции. –
Если я понимаю, вы хотите повернуть значение времени выполнения в тип? Чтобы вы могли что-то вроде 'newtype WrapInt n = WrapInt Int; wrapInt :: Int -> Int -> WrapInt n', где 'n' представляет значение времени выполнения, а затем позволяют другим функциям действовать соответственно? –
Да, это именно то, чего я хочу. – Sventimir