Не уверен, как вы можете передать один parameters
в generateCSR
, так как он требует 4 аргумента, но я записываю его в псевдокод.
generateCSR
возвращает Either
, завернутый внекоторый монанд m
, который должен быть экземпляром MonadRandom
, из которых IO
является кандидатом.Вы не можете напрямую использовать регистр для результата;Вы должны использовать привязку монады, чтобы получить доступ к Either
внутри.Во втором примере вы использовали связывание с шаблоном, который требует, чтобы Either
был Right
, что не будет корректно обрабатывать случай, когда это Left
.Вместо этого вы можете привязать результат к переменной, а затем использовать оператор case, чтобы решить, что делать:
f = do
r <- generateCSR parameters
case r of
Left err -> ...
Right req -> ...
Обратите внимание, что оба случая также должны будут возвращать что-то, заключенное в одну и ту же монаду, как того требуетdo
(связать).