class HashCacheProvider private constructor(private val dataFileLocation : Path) { private val hashCaches = mutableMapOf() companion object { fun invoke(dataFileLocation : Path) : IO> { return IO.fx { val (h) = IO { HashCacheProvider(dataFileLocation) } !effect { h.load() } h }.attempt() } }