```fun main() { val map = mapOf<String, An...
# arrow
s
Copy code
fun main() {

    val map = mapOf<String, Any?>(
        "color" to "red"
    )


    val parsedColor : Either<MappingError, String> =
        Option.fromNullable(map)
            .keyMap<String>("color")
            .fold({ it }, { color ->
                Some(color).map { it.toUpperCase() }.map { "$it - $it" }
            })



    println(parsedColor)


}

data class MappingError(val error : String)

inline fun <reified T : Any> Option<Map<String,Any?>>.keyMap(key : String) : Either<MappingError,T> {
    return when(this) {
        is None -> MappingError("no map to pull $key from").left()
        is Some<Map<String,Any?>> -> (this.t[key] as? T)?.let { it.right() }
            ?: MappingError("No key $key of ${T::class.toString()} found}").left()
    }
}