Является ли это стандартным способом преобразования оператора по типу t
оператору по типу a->t
? То есть, является ли это Lib реализации этой функции (fT
как functionTransformer
):Оператор преобразования типа `t` оператору типа` a-> t`
fT :: (t -> t -> t) -> (a -> t) -> (a -> t) -> (a -> t)
fT op f1 f2 = \x -> (f1 x) `op` (f2 x)
(мы могли бы обобщать к fT :: (t1 -> t2 -> t) -> (t3 -> t1) -> (t3 -> t2) -> t3 -> t
)
Я задавал этот вопрос, когда обучение Йесод: в этих рамках, мы можем добавить условие валидации для поля благодаря checkBool
. Например, можно создать поле, которое принимает только значение более Тана 100 с:
smallIntField = checkBool (<= 100) "error: this entry has to be smaller than 100" intField
Благодаря моей «функции трансформатора», можно легко управлять ограниченное значение с:
($&&) = fT (&&)
boundedIntField = checkBool ((>= 0) $&& (<= 100)) "error: this entry has to be between 0 and 100" intField
это только меня или ваша * подпись * выходной - либо 'ор: : t -> t -> t' или вы даже «fT :: (t1 -> t2 -> t) -> (t3 -> t1) -> (t3 -> t2) -> t3 -> t' (говорит ghci);) – Carsten
Действительно ли 'on' из' Data.Function' что вы ищете? – Mokosha
@ CarstenKönig действительно ... Я редактировал свой пост. @Mokosha не совсем, с 'on', есть только одна' f', в моем случае есть 'f1' и' f2'. – Sebastien