1 people like it.
Like the snippet!
Placeholder syntax for binary operators
Placeholder syntax like scala or clojure.
It can be used when the situation point-free style can't be applied.
It only works for binary operators.
But it's quite simple and can be used somewhat.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
open System
open System.Runtime.CompilerServices
type Placeholder () =
static member inline (*) (_:Placeholder, rhs) = fun lhs -> lhs * rhs
static member inline (/) (_:Placeholder, rhs) = fun lhs -> lhs / rhs
static member inline (+) (_:Placeholder, rhs) = fun lhs -> lhs + rhs
static member inline (-) (_:Placeholder, rhs) = fun lhs -> lhs - rhs
static member inline (%) (_:Placeholder, rhs) = fun lhs -> lhs % rhs
let __1 = Placeholder ()
let _1 binOp rhs = fun lhs -> binOp lhs rhs
let printHex (n:int) = (...)
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
0xff |> printHex
|> __1 % 0x10 |> printHex
|> __1 * 0x10 |> printHex
|> __1 / 0x04 |> printHex
|> __1 - 0x30 |> printHex
|> __1 + 0xc0 |> printHex
|> _1 (|||) 0x33 |> printHex
|> _1 (&&&) 0x55 |> printHex
|> _1 (<<<) 1 |> printHex
|> _1 (>>>) 1 |> printHex
|> ignore
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
|
//0b11111111
//0b00001111
//0b11110000
//0b00111100
//0b00001100
//0b11001100
//0b11111111
//0b01010101
//0b10101010
//0b01010101
|
namespace System
namespace System.Runtime
namespace System.Runtime.CompilerServices
Multiple items
type Placeholder =
new : unit -> Placeholder
static member ( + ) : Placeholder * rhs:'g -> ('h -> 'i) (requires member ( + ))
static member ( / ) : Placeholder * rhs:'j -> ('k -> 'l) (requires member ( / ))
static member ( % ) : Placeholder * rhs:'a -> ('b -> 'c) (requires member ( % ))
static member ( * ) : Placeholder * rhs:'m -> ('n -> 'o) (requires member ( * ))
static member ( - ) : Placeholder * rhs:'d -> ('e -> 'f) (requires member ( - ))
Full name: Script.Placeholder
--------------------
new : unit -> Placeholder
val rhs : 'm (requires member ( * ))
val lhs : 'n (requires member ( * ))
val rhs : 'j (requires member ( / ))
val lhs : 'k (requires member ( / ))
val rhs : 'g (requires member ( + ))
val lhs : 'h (requires member ( + ))
val rhs : 'd (requires member ( - ))
val lhs : 'e (requires member ( - ))
val rhs : 'a (requires member ( % ))
val lhs : 'b (requires member ( % ))
val binOp : ('a -> 'b -> 'c)
val rhs : 'b
val lhs : 'a
val printHex : n:int -> int
Full name: Script.printHex
val n : int
Multiple items
val int : value:'T -> int (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.int
--------------------
type int = int32
Full name: Microsoft.FSharp.Core.int
--------------------
type int<'Measure> = int
Full name: Microsoft.FSharp.Core.int<_>
"0b" + Convert.ToString(n,2).PadLeft(8,'0')
|> printfn "%s"
n
val __1 : Placeholder
Full name: Script.__1
val _1 : binOp:('a -> 'b -> 'c) -> rhs:'b -> lhs:'a -> 'c
Full name: Script._1
val ignore : value:'T -> unit
Full name: Microsoft.FSharp.Core.Operators.ignore
More information