Рассмотрим такой тип:
data St a b = St (a -> (b, St a b))
Этот тип хранит функцию, которая позволяет преобразовывать потоки значений. Определите функцию применения:
ap :: St a b -> [a] -> [b]
Она принимает ленту входящих значений и возвращает ленту выходов.
—-
Затрудняюсь даже понять задание. Во-первых, что за "ленты"? В сигнатуре ap я вижу списки.
Во-вторых, что за "потоки значений"? В уроках к пред. заданиям написана библиотечка для data Stream a = a :& Stream a
Если имеются в виду эти стримы - то как ограничить типы a и b в data St a b ?
автоматы Мили/Мура
Ага, только что смотрел Душкина при них. Но Холомьев точно не мог рассчитывать на то что читатель окажется в том контексте..
Ну вот, написал нечто правдоподобное (судя по ошибке всё равно недовольного компилятора) data St a b = St (a -> (b, St a b)) ap :: St a b -> [a] -> [b] ap st = map (fst . st) Что не так?
а что говорит компилятор?
Действительно: следите за типами и читайте ошибки компилятора. Наверняка было что-то вроде: Couldn't match expected type: a -> (b, b0) with actual type: St a b in second argument of ‘(.)', namely ‘st' А ведь тут явно указана проблема. Благодарю. Но где именно указана проблема, и как из этого указания вывести решение?
Обсуждают сегодня