The linked store-modules project owns the complete example: src/Store.shp, src/Snapshot.shp, and the implementations under src/Stores/. Keeping those files in one ordinary project makes the module layout, implementation headers, and runnable entry visible together.
Store.shp declares its primary module type T. Both Stores/Flat.shp and Stores/JSON.shp begin with module: Store;, so their private representations differ while callers see the same operations.
Store Implementations
let flatflat: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Flat = StoreModules.Stores.Flat.createcreate: pure fn!(value: String) -> $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Flat("flat""flat": String);
✓flatflat: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Flat: StoreModules.Stores.Flat;
let jsonjson: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.JSON = StoreModules.Stores.JSON.createcreate: pure fn!(value: String) -> $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.JSON("json""json": String);
expect ✓(
StoreModules.Stores.Flat.readread: pure fn!(store: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Flat) -> String(flatflat: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Flat),
StoreModules.Stores.JSON.readread: pure fn!(store: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.JSON) -> String(jsonjson: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.JSON),
) == ("flat""flat": String, "json""json": String);Stores/Versioned.shp keeps one file header while composing the Store and Snapshot requirements with an anonymous #{ ... } signature.
Composite Signature
let storestore: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned = StoreModules.Stores.Versioned.createcreate: pure fn!(value: String) -> $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned("versioned""versioned": String);
✓storestore: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned: StoreModules.Stores.Versioned;
expect ✓(
StoreModules.Stores.Versioned.readread: pure fn!(store: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned) -> String(storestore: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned),
StoreModules.Stores.Versioned.snapshotsnapshot: pure fn!(store: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned) -> Int(storestore: $project.6578616d706c65732f626f6f6b2f73746f72652d6d6f64756c6573.Stores.Versioned),
) == ("versioned""versioned": String, 11: Int);