Prefab structure types (see Prefab Structure Types) automatically support serialization: they can be written to an output stream, and a copy can be read back in from an input stream:
'#s(sprout bean)
Other structure types created by struct , which offer more abstraction than prefab structure types, normally write either using #<....> notation (for opaque structure types) or using #(....) vector notation (for transparent structure types). In neither case can the result be read back in as an instance of the structure type:
#<posn>
pipe::1: read: bad syntax `#<`
#(struct:posn 1 2)
> v'#(struct:posn 1 2)
> (posn?v)#f
#t
The serializable-struct form defines a structure type that can be serialize d to a value that can be printed using write and restored via read . The serialize d result can be deserialize d to get back an instance of the original structure type. The serialization form and functions are provided by the racket/serialize library.
(posn 1 2)
((3) 1 ((#f . deserialize-info:posn-v0)) 0 () () (0 1 2))
(posn 1 2)
In addition to the names bound by struct , serializable-struct binds an identifier with deserialization information, and it automatically provide s the deserialization identifier from a module context. This deserialization identifier is accessed reflectively when a value is deserialized.