From 2253998bf7cc33d2624e69dd7b704fe219195074 Mon Sep 17 00:00:00 2001 From: gusty <1261319+gusty@users.noreply.github.com> Date: Sat, 13 Jan 2024 21:57:51 +0100 Subject: [PATCH] Applicative (math) operators --- src/FSharpPlus/Math/Applicative.fs | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/FSharpPlus/Math/Applicative.fs b/src/FSharpPlus/Math/Applicative.fs index c21311508..790822718 100644 --- a/src/FSharpPlus/Math/Applicative.fs +++ b/src/FSharpPlus/Math/Applicative.fs @@ -64,4 +64,57 @@ module Applicative = let inline ( >=. ) (x: 'T) (y: '``Functor<'T>``) = map ((>=) x) y : '``Functor`` let inline ( .>=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>=) x <*> y : '``Applicative`` +/// Math Operators ready to use over (parallel) Applicative Functors. +module ParallelApplicative = + + let inline ( ~-. ) (x: '``Functor<'T>``) = map ((~-)) x : '``Functor<'T>`` + + let inline ( .+ ) (x: '``Functor<'T>``) (y: 'T) = map ((+)/> y) x : '``Functor<'T>`` + let inline ( +. ) (x: 'T) (y: '``Functor<'T>``) = map ((+) x) y : '``Functor<'T>`` + let inline ( .+. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (+) x y : '``Applicative<'T>`` + + let inline ( .- ) (x: '``Functor<'T>``) (y: 'T) = map ((-)/> y) x : '``Functor<'T>`` + let inline ( -. ) (x: 'T) (y: '``Functor<'T>``) = map ((-) x) y : '``Functor<'T>`` + let inline ( .-. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (-) x y : '``Applicative<'T>`` + + let inline ( .* ) (x: '``Functor<'T>``) (y: 'T) = map ((*)/> y) x : '``Functor<'T>`` + let inline ( *. ) (x: 'T) (y: '``Functor<'T>``) = map ((*) x) y : '``Functor<'T>`` + let inline ( .*. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (*) x y : '``Applicative<'T>`` + + let inline ( .% ) (x: '``Functor<'T>``) (y: 'T) = map ((%)/> y) x : '``Functor<'T>`` + let inline ( %. ) (x: 'T) (y: '``Functor<'T>``) = map ((%) x) y : '``Functor<'T>`` + let inline ( .%. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (%) x y : '``Applicative<'T>`` + + let inline ( ./ ) (x: '``Functor<'T>``) (y: 'T) = map ((/)/> y) x : '``Functor<'T>`` + let inline ( /. ) (x: 'T) (y: '``Functor<'T>``) = map ((/) x) y : '``Functor<'T>`` + let inline ( ./. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (/) x y : '``Applicative<'T>`` + + let inline ( .= ) (x: '``Functor<'T>``) (y: 'T) = map ((=)/> y) x : '``Functor`` + let inline ( =. ) (x: 'T) (y: '``Functor<'T>``) = map ((=) x) y : '``Functor`` + let inline ( .=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (=) x y : '``Applicative`` + + let inline ( .> ) (x: '``Functor<'T>``) (y: 'T) = map ((>)/> y) x : '``Functor`` + let inline ( >. ) (x: 'T) (y: '``Functor<'T>``) = map ((>) x) y : '``Functor`` + let inline ( .>. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>) x y : '``Applicative`` + + let inline ( .< ) (x: '``Functor<'T>``) (y: 'T) = map ((<)/> y) x : '``Functor`` + let inline ( <. ) (x: 'T) (y: '``Functor<'T>``) = map ((<) x) y : '``Functor`` + let inline ( .<. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (<) x y : '``Applicative`` + + let inline (.|| ) (x: '``Functor``) (y: bool) = map ((||)/> y) x : '``Functor`` + let inline ( ||.) (x: bool) (y: '``Functor``) = map ((||) x) y : '``Functor`` + let inline (.||.) (x: '``Applicative``) (y: '``Applicative``) = (||) x y : '``Applicative`` + + let inline (.&& ) (x: '``Functor``) (y: bool) = map ((&&)/> y) x : '``Functor`` + let inline ( &&.) (x: bool) (y: '``Functor``) = map ((&&) x) y : '``Functor`` + let inline (.&&.) (x: '``Applicative``) (y: '``Applicative``) = (&&) x y : '``Applicative`` + + let inline ( .<= ) (x: '``Functor<'T>``) (y: 'T) = map ((<=)/> y) x : '``Functor`` + let inline ( <=. ) (x: 'T) (y: '``Functor<'T>``) = map ((<=) x) y : '``Functor`` + let inline ( .<=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (<=) x y : '``Applicative`` + + let inline ( .>= ) (x: '``Functor<'T>``) (y: 'T) = map ((>=)/> y) x : '``Functor`` + let inline ( >=. ) (x: 'T) (y: '``Functor<'T>``) = map ((>=) x) y : '``Functor`` + let inline ( .>=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>=) x y : '``Applicative`` + #endif \ No newline at end of file