F#で半角数字を全角に変換するメソッドを書くというテストです。

まずは美しくない叩き台コード

let han2zen num =
    let tbl = [|'0';'1';'2';'3';'4';'5';'6';'7';'8';'9'|]
    let c_num (n:char) = int(byte(n) - byte('0'))
    let snum = string(num)
    let a = snum.ToCharArray()
    let a2 : int[] = Array.map c_num a
    let a3 : char[] = Array.map (fun (i:int) -> tbl.[i]) a2
    new System.String(a3)

これをパイプラインを導入して直すと...

let han2zen num =
    let tbl = [|'0';'1';'2';'3';'4';'5';'6';'7';'8';'9'|]
    let str_num = string(num)
    let a = 
        str_num.ToCharArray()
        |> Array.map (fun n -> tbl.[int(byte(n) - byte('0'))])
    new String(a)

ちょっと直して ...

let han2zen num =
    let tbl = [|'0';'1';'2';'3';'4';'5';'6';'7';'8';'9'|]
    let new_string (a : char[]) = new String(a)

    string(num).ToCharArray()
    |> Array.map (fun n -> int(byte(n) - byte('0')))
    |> Array.map (fun n -> tbl.[n])
    |> new_string

F#関係なく、テーブルなんか使わなくて良いことに気づいてロジックを修正

let han2zen num =
    let new_string (a : char[]) = new String(a)
    string(num).ToCharArray()
    |> Array.map (fun n -> char(int(byte(n) - byte('0')) + int('0')))
    |> new_string

うん。ちょっと納得。でも、まだまだF#のスキルが足りないので、もう少し学習が必要です。

// 関数をテストするコード
printfn "%A" <| han2zen 1234
//結果→ "1234"