Провайдери типів F# 3.0
Хоч я зараз і роблю черговий репост, але дуже хочеться поділитись з людьми новою (відносно) інформацією.
Провайдери типів (Type Providers) – новенька фіча недавно випущеного F# 3.0. Це спосіб підключення до готової програми типів, згенерованих у іншому місці.
Перший і основний приклад використання – вбудовування SQL у мову. Багато де, у тому числі в нашій компанії, використовуться добування інформації з бази приблизно у такому вигляді:
let db = MegaDataBase.Connect()
let result = db.Query("SELECT * FROM MEGATABLE WHERE 1 != 0")
З новими провайдерами типу можна зробити наступне:
[<Generate>]
type schema = SqlDataConnection<...>
let db = schema.GetDataContext()
let result = query {
for record in db.MEGATABLE do
where (1 != 0)
select record
}
Даний код буде повністю статично типізований! Якщо вас це не дивує, ось інший аргумент

Щоб пояснити, чому провайдери типів більш потужні, ніж просто Language Integrated Query, ось приклад щодо регекспів:
open Samples.FSharpPreviewRelease2011.RegexTypeProvider
type T = RegexTyped< @"(?<AreaCode>^\d{3})-(?<PhoneNumber>\d{3}-\d{4}$)">
let reg = T()
let result = T.IsMatch("425-123-2345")
let r = reg.Match("425-123-2345").AreaCode.Value //r equals "425"
Наскільки я зрозумів, регексп парситься на льоту і Intellisense автоматом підхоплює його структуру.
На мою думку, F# уже став сильно практичнішим за свого імперативного сородича. І чим раз, тим більше хочеться відповісти “Так!” на питання “Чи полетить?”.
Ок. Нах Java, займусь но я напевне Clojure при нагоді.
Правда ні одне, ні друге, ні третє в мене на роботі не використовується. А я і так чогось на роботу червонооким іноді приходжу.
bunyk
Листопад 17, 2011 at 00:01
ну хоч буде тобі у кого питатись =) зустрічався тут один, любитель Ліспів ) Окрім того, ти ж здається осилив SICP до кінця?
danbst
Листопад 17, 2011 at 01:24