Data IOResult (A:*) :* where ioResult : (world:RealWorld)(a:A)(IOResult A); IO = [A:*](RealWorld -> (IOResult A)); world = initWorld II;