Ответ 1
Угу. Существует магическая библиотека под названием packman
. Он позволяет превратить любую вещь haskell в данные (если в ней нет IORef
или связанных с ней вещей). Здесь вам понадобятся:
trySerialize :: a -> IO (Serialized a)
deserialize :: Serialized a -> IO a
instance Typeable a => Binary (Serialized a)
Да, это точные типы. Вы можете скомпоновать свои действия IO
с помощью trySerialize
, использовать Binary
, чтобы перенести его туда, где есть, а затем deserialize
, чтобы получить действие IO, готовое к использованию.
Предостережения для packman
заключаются в следующем:
- Он хранит вещи как трюки. Вероятно, это то, что вы хотите, так что node может выполнить оценку.
- Тем не менее, если ваш тэк огромный,
Binary
, вероятно, будет огромным. Оценка thunk может исправить это. - Как я уже сказал, изменчивые ссылки - нет-нет. Единственное, что нужно уяснить, это то, что они находятся в трюках, не зная об этом.
- Тем не менее, если ваш тэк огромный,
Кроме этого, это похоже на то, что вы хотите!