У меня есть две функции, которые представляют собой композицию чистых функций. Первая функция берет участок, строит на нем дом и делает снимок для рекламы в журнале:
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
Вторая функция также берет участок, строит на нем дом и добавляет к нему последний штрих:
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
Ясно, что эти две функции тоже чистые, поскольку они представляют собой композицию чистых функций. Теперь у меня есть посылка, допустим niceParcel
и я хочу применить к ней обе функции. Тем не менее, я хочу избежать того, чтобы первые три подфункции вычислялись дважды, так как они требуют много времени для вычисления, и они совместно используются двумя функциями.
Как мне реорганизовать мой код, чтобы избежать этих ненужных вычислений, сохранив при этом эти красивые чистые функции, которые имеют ясное значение?
parcel
не является универсальным типом, вы можете сделать код более идиоматичным с помощьюlet buildAnd... = inspect >> buildWalls >> ... >> advertise
(и с правильным отступом) - person Ramon Snir   schedule 29.08.2013build
,advertise
иcompleteHouse
? - person Ramon Snir   schedule 29.08.2013build
- person Ingo   schedule 29.08.2013