//[snippet:Implementation] open System 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 () /// it's same as swap though.. let _1 binOp rhs lhs = binOp lhs rhs let printHex (n:int) = (*[omit:(...)]*) "0b" + Convert.ToString(n,2).PadLeft(8,'0') |> printfn "%s" n (*[/omit]*) //[/snippet] // [snippet:Usage] 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 // [/snippet] // [snippet:Result] //0b11111111 //0b00001111 //0b11110000 //0b00111100 //0b00001100 //0b11001100 //0b11111111 //0b01010101 //0b10101010 //0b01010101 // [/snippet]