Полиморфная рекурсия на Haskell с составными картами вызывает ошибку бесконечного типа

Как правильно создать функцию, которая может динамически создавать составленную карту?

Это приводит к ошибке (также происходит с fmap):

createComposedMaps list = accumulate list map
    where 
        accumulate (x:xs) m = accumulate xs (m.map)
        accumulate []     m = m

list не имеет значения, это просто подсчитать количество композиций.

Я получаю сообщение об ошибке «не могу создать бесконечный тип»:

Occurs check: cannot construct the infinite type: a2 ~ [a2]
Expected type: (a2 -> b1) -> a2 -> b1
  Actual type: (a2 -> b1) -> [a2] -> [b1]
Relevant bindings include
  m :: (a2 -> b1) -> c (bound at dimensional_filter.hs:166:27)
  accumulate :: [t1] -> ((a2 -> b1) -> c) -> (a2 -> b1) -> c
    (bound at dimensional_filter.hs:166:9)
In the second argument of ‘(.)’, namely ‘map’
In the second argument of ‘accumulate’, namely ‘(m . map)’

Occurs check: cannot construct the infinite type: b1 ~ [b1]
Expected type: (a2 -> b1) -> a2 -> b1
  Actual type: (a2 -> b1) -> [a2] -> [b1]
Relevant bindings include
  m :: (a2 -> b1) -> c (bound at dimensional_filter.hs:166:27)
  accumulate :: [t1] -> ((a2 -> b1) -> c) -> (a2 -> b1) -> c
    (bound at dimensional_filter.hs:166:9)
In the second argument of ‘(.)’, namely ‘map’
In the second argument of ‘accumulate’, namely ‘(m . map)’

Цель состоит в том, чтобы создать динамически составленную функцию отображения, которую я смогу позже использовать. В то время как другие полугруппы могут быть добавлены вместе (списки, числа ...). Функции, кажется, намного сложнее.

Был бы признателен за пример, показывающий Fmap и / или карту.

я нашел этоФункция библиотеки для составления функции с собой n раз

Но мне нужно использовать каждую промежуточную композицию, а не только конечную композицию. И некоторые примеры все еще дают мне бесконечную ошибку типа.

Оказывается, проблема может включать полиморфную рекурсию. Как каждое рекурсивное применениеaccumulate Функция меняет тип карты.

Ответы на вопрос(1)

Ваш ответ на вопрос