Но наткнулся на один странный баг, который не смог воспроизвести дома. А именно, есть комбинатор функций a, b:
let (|>>) a b = fun x -> a x |> b
Так вот, используя интерпритатор F# из плагина к VS2008 я не мог построить комбинацию скажем таких функций:
let f1 x = x + 1 let f2 x = x.ToString()
Интерпритатор ругался и просил явно прописать типы.
хотя для
let f1 x = x + 1 let f2 x = x * x
или
let f2 x = (float) x + 1.0
комбинатор работал.
А вот дома, в VS2010 всё заработало в точности так, как и ожидалось.
Следующий код:
let (|>>) a b = fun x -> a x |> b let f1 x = x + 1 let f2 x = (float) x + 1.0 let f3 x = [x] let f' = f1 |>> f2 |>> f3 f' 10
выдал:
val ( |>> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c val f1 : int -> int val f2 : int -> float val f3 : 'a -> 'a list val f' : (int -> float list) > f' 10;; val it : float list = [12.0]
т.е. возможно есть какие-то проблемы с комбинаторами в старых версиях F#.
Но точно посмотреть версию F# на работе смогу только после НГ...
Всех с наступающим!))
Комментариев нет:
Отправить комментарий