Полиморфная рекурсия на 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
Функция меняет тип карты.