D
Size: a a a
ZM
D
Oℕ
D
// функтор - вычисление, работающие с результатами типа А, поддерживает метод map
data class MyRandom<A>(
val get: (bits: Int) -> A
) {
companion object {
val intRandom: MyRandom<Int> = MyRandom { Random.nextBits(it) }
val hexRandom: MyRandom<String> = intRandom.map { it.toString(16) }
}
}
// метод map для функтора
fun <A, B> MyRandom<A>.map(f: (A) -> B): MyRandom<B> =
MyRandom(get = {bits -> f(get(bits)) })
fun main(args: Array<String>) {
println("random=" + MyRandom.intRandom.get(12)) // выводит random=1247
println("hexRandom=" + MyRandom.hexRandom.get(12)) // выводит hexRandom=c25
}
w
// функтор - вычисление, работающие с результатами типа А, поддерживает метод map
data class MyRandom<A>(
val get: (bits: Int) -> A
) {
companion object {
val intRandom: MyRandom<Int> = MyRandom { Random.nextBits(it) }
val hexRandom: MyRandom<String> = intRandom.map { it.toString(16) }
}
}
// метод map для функтора
fun <A, B> MyRandom<A>.map(f: (A) -> B): MyRandom<B> =
MyRandom(get = {bits -> f(get(bits)) })
fun main(args: Array<String>) {
println("random=" + MyRandom.intRandom.get(12)) // выводит random=1247
println("hexRandom=" + MyRandom.hexRandom.get(12)) // выводит hexRandom=c25
}
D
Oℕ
D
Другие примеры функторов с полезным map
иммутабельный List<A>
MyInputStream<A>
Optional<A>
AS
D
D
D
D
Монада — это функтор с двумя дополнительными операциями. Прежде всего, монада, в отличие от функтора, содержит операцию создания из константы, эта операция называется lift:
D
D
AS
S