// http://stackoverflow.com/questions/9272285/f-is-there-a-way-to-extend-the-monad-keyword-list
let p = seq {
for i in 1 .. 4 do
yield (i + 100)
}
p.Dump("p")
(*
let q = seq {
for i in 1 .. 10 do
select (i + 100)
reverse
}
q.Dump("q")
*)
type MySeqBuilder() =
// Standard definition for 'for' and 'yield' in sequences
member x.For (source : seq<'T>, body : 'T -> seq<'R>) =
seq { for v in source do yield! body v }
member x.Yield item =
seq { yield item }
// Define an operation 'select' that performs projection
[]
member x.Select (source : seq<'T>, [] f: 'T -> 'R) : seq<'R> =
Seq.map f source
// Defines an operation 'reverse' that reverses the sequence (several versions)
[]
member x.ReverseEnglish (source : seq<'T>) =
List.ofSeq source |> List.rev
[]
member x.ReverseRussian (source : seq<'T>) =
List.ofSeq source |> List.rev
[] // fǎn zhuǎn
member x.ReverseChinese (source : seq<'T>) =
List.ofSeq source |> List.rev
let myseq = MySeqBuilder()
let r = myseq {
for i in 1 .. 4 do
select (i + 100)
reverse
реверсировать
反转
}
r.Dump("r")
//