Я изучаю библиотеку mtl и пытаюсь сделать некоторые из моих собственных MonadTransformers. Я проверял объявление Control.Monad.State.StateT, и по всему коду я вижу этот синтаксис:
execStateT :: (Monad m) => StateT s m a -> s -> m s
execStateT m s = do
~(_, s') <- runStateT m s
return s'
Что означает этот операнд ~?