LINUX.ORG.RU

История изменений

Исправление Miguel, (текущая версия) :

В хаскелле для такого надо фактически все с нуля переписывать через какую-то монаду.

Не надо, хаскель достаточно гибок. В данном случае можно, например, так:

func args = subfunc3 <$> b where
    b = subfunc2 <$> a
    a =
        do let a' = subfunc1 args
             when (someCondition a') $ Logger.warning "Some shit happened"
             return a'
Выглядит почти так же. А вообще, советую по возможности использовать let, а не where, и писать в нормальном порядке:
func args =
    let a = subfunc1 args
        b = subfunc2 a
    in subfunc3 b
vs
func args =
    do let a = subfunc1 args
       when (someCondition a) $ Logger.warning "Some shit happened"
       let b = subfunc2 a
       return $ subfunc3 b

Исходная версия Miguel, :

В хаскелле для такого надо фактически все с нуля переписывать через какую-то монаду.

Не надо, хаскель достаточно гибок. В данном случае можно, например, так:

func args = subfunc3 <$> b where
    b = subfunc2 <$> a
    a =
        do let a' = subfunc1 args
             when (someCondition a') $ Logger.warning "Some shit happened"
             return a'
Выглядит почти так же. А вообще, советую по возможности использовать let, а не where, и писать в нормальном порядке:
func args =
    let a = subfunc1 args
         b = subfunc2 a
    in subfunc3 b
vs
func args =
    do let a = subfunc1 args
       when (someCondition a) $ Logger.warning "Some shit happened"
       let b = subfunc2 a
       return $ subfunc3 b