• ? code Haskell typefun
    есть reify с помощью него я могу протаскивать словарики в инстансы, в которые через instance head их не протолкнуть. у меня есть например:
    
    ```
    withAcquire
      :: forall m r.
         (MonadR m)
      => (forall s. Reifies s (AcquireIO (Region m)) => Proxy s -> m r)
      -> m r
    withAcquire f = reify (AcquireIO (unsafeToIO . macquire)) f
      where
        macquire :: SEXP V a -> m (SEXP (Region m) a)
        macquire = acquire
    ```
    
    я хочу теперь тоже самое но работающее в чистом коде (для чистовекторов)
    вот каким чудом это сделать непонятно:
    
    ```
    withGlobalAcquire :: (forall s t . Reifies s (AcquireIO t) => Proxy s -> ST t r) -> r
    withGlobalAcquire f = ST.runST $ reify (AcquireIO acquireIO) f
      where
        acquireIO :: SEXP V ty -> IO (SEXP t ty)
        acquireIO x = do
          R.preserveObject x
          return $ R.unsafeRelease x
    ```
    
    это работает, но есть проблема, что тип вектора определяется как ElemRep s v ty, т.к. у нас тут тип t из forall, то в итоге этот констрейнт нифига не добавить и что делать неясно

Replies (0)