LINUX.ORG.RU

[ФВП] Назрел вот вопросец...


0

1

Есть некая обобщенная стратегия вычислений, выраженная функцией вида:
Strategy(f, g) типа (a->b) -> (a->b) -> c
где и f() и g() типа a -> b
По идее, порядок вычислений важен, и потому параметры f() и g() поменять местами нельзя. Но и f() и g() имеют одинаковый тип, и потому, вроде бы взаимозаменяемы.
Вопрос: как определить, что функции Strategy переданы именно (f, g), а не (g, f), (f, f) или (g, g) ?

Функция полиморфна по c? Тогда есть только одна такая функция, зовется жопой в простонародье.

anonymous
()

...Ну или даже так:
Как исключить передачу Strategy всех комбинаций параметров, кроме (f, g)?

malbolge ★★
() автор топика
Ответ на: комментарий от malbolge

Ввести новые типы обёртки

data F = F (a -> b)
data G = G (a -> b)

Определить
f = F f' where f' = ...
g = G g' where g' = ...

И использовать Strategy(f, g) типа F -> G -> c

kim-roader ★★
()
Ответ на: комментарий от kim-roader

Только тогда newtype лучше. И аксессоры: newtype F a b = F {runF :: a -> b}.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.