2018-10-12 14:09:16 -04:00
|
|
|
import pytest # type: ignore
|
2018-10-12 17:02:17 -04:00
|
|
|
from typing import Callable, TypeVar
|
2018-10-12 14:09:16 -04:00
|
|
|
|
2018-10-12 17:02:17 -04:00
|
|
|
from monads import Applicative
|
|
|
|
from .fixtures import monad
|
2018-10-12 14:09:16 -04:00
|
|
|
|
|
|
|
T = TypeVar("T")
|
|
|
|
S = TypeVar("S")
|
|
|
|
|
|
|
|
|
|
|
|
def test_fmap_using_ap(monad) -> None:
|
|
|
|
f: Callable[[int], int] = lambda x: x + 1
|
|
|
|
m: Applicative[int] = monad.pure(3)
|
|
|
|
assert m.map(f) == m.apply(monad.pure(f))
|
2018-12-11 23:20:23 -05:00
|
|
|
|
|
|
|
|
|
|
|
def test_apply_and_operator(monad) -> None:
|
|
|
|
subtract: Callable[[int], Callable[[int], int]] = lambda x: lambda y: x - y
|
|
|
|
ten = monad.pure(10)
|
|
|
|
six = monad.pure(6)
|
|
|
|
assert six.apply(ten.map(subtract)) == subtract * ten & six
|