Программирование с ограничением ранга 2 / применение ограничений

Siddharth Bhat спросил: 03 ноября 2018 в 09:11 в: haskell
import Data.Constraintreify :: (c' :- c) -> (c => a) -> (c' => a)
reify cons f = case cons of Sub d -> case d of Dict -> f

Используя reify, я могу ослабить ограничение c на ограничение c', учитывая, что c' подразумевает c.

Теперь я хочу Rank2 вариант этого:

-- reify2 Rank2's reify
reify2 :: (forall r1. c' r1 :- c r1) -> 
          (forall r2. c r2 => a) -> 
          (forall r3. c' r3 => a)
reify2 cons f = ???

Но я ' Я не в состоянии реализовать такую ​​функцию, даже если она должна быть "явно" возможной.

0 ответов