P
Size: a a a
P
p
p
G
G
P
λ
p
P
λ
DS
def get_counter() -> int:
...
def set_counter(a: int):
...
# есть моя программа:
a = get_counter()
set_counter(a + 1)
b = get_counter()
#я думаю отрефакторить, хочу убрать повторяющийся код:
counter = get_counter()
a = counter
set_counter(a + 1)
b = counter
# получаю фигню очевидным образом
# теперь если я использую IO
def get_counter() -> IO[int]:
...
def set_counter(a: int) -> IO[()]:
...
#есть моя программа:
monadic_do:
a <- get_counter()
set_counter(a + 1)
b <- get_counter()
#рефакторю, получаю то же поведение, что и раньше:
monadic_do:
counter = get_counter()
a <- counter
set_counter(a + 1)
b <- counter
p
p
P
DS
DS
λ
DS
DS
p
def get_counter() -> int:
...
def set_counter(a: int):
...
# есть моя программа:
a = get_counter()
set_counter(a + 1)
b = get_counter()
#я думаю отрефакторить, хочу убрать повторяющийся код:
counter = get_counter()
a = counter
set_counter(a + 1)
b = counter
# получаю фигню очевидным образом
# теперь если я использую IO
def get_counter() -> IO[int]:
...
def set_counter(a: int) -> IO[()]:
...
#есть моя программа:
monadic_do:
a <- get_counter()
set_counter(a + 1)
b <- get_counter()
#рефакторю, получаю то же поведение, что и раньше:
monadic_do:
counter = get_counter()
a <- counter
set_counter(a + 1)
b <- counter