В комментарии к одному из моих ответов SO пользователь sdcwc по существу указал, что следующий код:
comb 0 = [[]]
comb n =
let rest = comb (n-1)
in map ('0':) rest
++ map ('1':) rest
можно заменить на:
comb n = replicateM n "01"
который полностью ошеломил меня.
Теперь я ищу учебник, книгу или PDF, который учит этим передовым концепциям. Я не ищу учебник "что монада", нацеленное на новичков или онлайн-ссылок, объясняющих тип replicateM
. Я хочу научиться мыслить в монадах и эффективно использовать их, монадические "шаблоны", если хотите.