Как сохранить рекурсивный тип данных с помощью Data.Binary

DataBinary великолепен. У меня есть только один вопрос. Представим, что у меня есть такой тип данных:

import Data.Binary

data Ref = Ref {
    refName :: String,
    refRefs :: [(String, Ref)]
}

instance Binary Ref where
    put a = put (refName a) >> put (refRefs a)
    get = liftM2 Ref get get

Легко увидеть, что это рекурсивный тип данных, который работает, потому что Haskell ленив. Поскольку Haskell как язык не использует ни ссылок, ни указателей, а представляет данные как есть, я не уверен, как это будет сохранено. У меня есть веские основания полагать, что этот наивный упрек приведет к бесконечной строке байтов ...

Так как же можно безопасно сохранить этот тип?

5
задан Lanbo 26 June 2011 в 11:50
поделиться