Я работаю с библиотекой sop-core и хочу написать функцию следующего типа:
patch :: NS I xs -> NP Maybe xs -> NP Maybe xs
xs
- это список уровня типатаких типов, как '[Int,Char,Bool]
. I
- функтор тождеств. NS I xs
является типом n-арной суммы. NP Maybe xs
- это n-арный продукт, в котором каждый компонент может существовать или не существовать.
patch
должен взять значение из n-арной суммы и заполнить соответствующий слотn-ary продукт, перезаписывает его, если он уже существует. Например:
patched :: NP Maybe '[Int,Char,Bool]
patched = patch (Z (I 3)) (Nothing :* Nothing :* Nothing :* Nil)
-- patched == Just 3 :* Nothing :* Nothing :* Nil
Я подозреваю, что решение может включать функцию injections
, но я в замешательстве.