| RW
class Storage s where
type Tx s (m :: TxMode) :: *
getByHash :: Tx s m -> s -> Hash -> IO (Maybe RpkiObject)
storeObj :: Tx s 'RW -> s -> (Hash, StorableRO) -> IO ()
readWriteTx :: s -> (Tx s 'RW -> IO a) -> IO a
и есть функция
updateRepository :: Storage s => s -> IO ()
updateRepository storage = …
try (readWriteTx storage $ \tx -> storeObj tx storage st)
и вот он мне говорит
• Couldn't match expected type ‘Tx s 'RW’
with actual type ‘Tx s1 'RW’
NB: ‘Tx’ is a non-injective type family
• In the first argument of ‘storeObj’, namely ‘tx’
In the expression: storeObj tx storage st
я очень смутно помню в чем загвоздка с non-injective type family, но есть там какой-то простой способ сказать ему что я хочу?
У тебя в readWriteTx storage создается tx у которого нет гарантии, что тег совпадает с s
Обсуждают сегодня