Я недавно использовал уточненный для уточнения типов в Haskell и столкнулся с серьезной проблемой юзабилити. Я не могу понять, как уточнить весь список значений во время компиляции.
Например, я могу написать:
{-# LANGUAGE TemplateHaskell #-}
import Refined
oneToThree :: [Refined Positive Int]
oneToThree = [$$(refineTH 1), $$(refineTH 2), $$(refineTH 3)]
Но я не могу сделать это, исключает возможность используя синтаксис диапазона, потому что Refined
(по уважительной причине) не имеет экземпляра для Enum
.
Я хотел бы иметь возможность сделать что-то вроде
oneToThree :: [Refined Positive Int]
oneToThree = $$(traverse refineTH [1..3])
, но Я не могу заставить это скомпилировать, потому что я не могу поднять [TExp (Refined Positive Int)]
в TExp [Refined Positive Int]
.
Есть ли шаблон haskell magi c, который я пропустил, который позволит мне сделать это?
Также будут открыты предложения по улучшению облегченных библиотек типов уточнения, если у кого-то есть предложение.