even better nested PartialType
from monad to applicative