Это на самом деле невозможно без хитрости класса типов, потому что вы пытаетесь «поднять» функцию с произвольным числом аргументов - что, конечно, не совсем хорошо определенное понятие в Haskell из-за каррирования .
Лучшее, что вы можете получить в стандартном, читаемом Haskell, это:
logTransaction :: Int -> Int -> MyReaderT Bool
logTransaction amount price = join $ insertTransaction
<$> currentDay
<*> pure amount
<*> pure price
Я думаю, что это, вероятно, хорошо - предложенный оператор кажется мне довольно сложным для чтения, поскольку трудно сказать, сколько аргументов обрабатывается или куда они идут.
С препроцессором Strathclyde Haskell Enhancement , logTransaction
можно записать следующим образом, используя идиоматические скобки :
logTransaction :: Int -> Int -> MyReaderT Bool
logTransaction amount price = (| insertTransaction currentDay ~amount ~price @ |)
Наконец, технически можно написать logTransaction
в бессмысленном стиле, но я бы не советовал:
logTransaction :: Int -> Int -> MyReaderT Bool
logTransaction = ((currentDay >>=) .) . flip . flip insertTransaction