Skip to content

Commit

Permalink
Applicative (math) operators
Browse files Browse the repository at this point in the history
  • Loading branch information
gusty committed Jan 13, 2024
1 parent 9a08136 commit 2253998
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions src/FSharpPlus/Math/Applicative.fs
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,57 @@ module Applicative =
let inline ( >=. ) (x: 'T) (y: '``Functor<'T>``) = map ((>=) x) y : '``Functor<bool>``
let inline ( .>=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>=) <!> x <*> y : '``Applicative<bool>``

/// <summary>Math Operators ready to use over (parallel) Applicative Functors.</summary>
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<bool>``
let inline ( =. ) (x: 'T) (y: '``Functor<'T>``) = map ((=) x) y : '``Functor<bool>``
let inline ( .=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (=) <!> x </> y : '``Applicative<bool>``

let inline ( .> ) (x: '``Functor<'T>``) (y: 'T) = map ((>)/> y) x : '``Functor<bool>``
let inline ( >. ) (x: 'T) (y: '``Functor<'T>``) = map ((>) x) y : '``Functor<bool>``
let inline ( .>. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>) <!> x </> y : '``Applicative<bool>``

let inline ( .< ) (x: '``Functor<'T>``) (y: 'T) = map ((<)/> y) x : '``Functor<bool>``
let inline ( <. ) (x: 'T) (y: '``Functor<'T>``) = map ((<) x) y : '``Functor<bool>``
let inline ( .<. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (<) <!> x </> y : '``Applicative<bool>``

let inline (.|| ) (x: '``Functor<bool>``) (y: bool) = map ((||)/> y) x : '``Functor<bool>``
let inline ( ||.) (x: bool) (y: '``Functor<bool>``) = map ((||) x) y : '``Functor<bool>``
let inline (.||.) (x: '``Applicative<bool>``) (y: '``Applicative<bool>``) = (||) <!> x </> y : '``Applicative<bool>``

let inline (.&& ) (x: '``Functor<bool>``) (y: bool) = map ((&&)/> y) x : '``Functor<bool>``
let inline ( &&.) (x: bool) (y: '``Functor<bool>``) = map ((&&) x) y : '``Functor<bool>``
let inline (.&&.) (x: '``Applicative<bool>``) (y: '``Applicative<bool>``) = (&&) <!> x </> y : '``Applicative<bool>``

let inline ( .<= ) (x: '``Functor<'T>``) (y: 'T) = map ((<=)/> y) x : '``Functor<bool>``
let inline ( <=. ) (x: 'T) (y: '``Functor<'T>``) = map ((<=) x) y : '``Functor<bool>``
let inline ( .<=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (<=) <!> x </> y : '``Applicative<bool>``

let inline ( .>= ) (x: '``Functor<'T>``) (y: 'T) = map ((>=)/> y) x : '``Functor<bool>``
let inline ( >=. ) (x: 'T) (y: '``Functor<'T>``) = map ((>=) x) y : '``Functor<bool>``
let inline ( .>=. ) (x: '``Applicative<'T>``) (y: '``Applicative<'T>``) = (>=) <!> x </> y : '``Applicative<bool>``

#endif

0 comments on commit 2253998

Please sign in to comment.