ДеФюнес1, DeFunes1

Sequential comparison in F#

В этом постинге нет крутого матана, но надеюсь, что это кому-то будет полезным с образовательной точки зрения.

Originally posted by bytebuster463 at Sequential comparison in F#

This kind of questions becomes more and more popular:

I want to simplify expression if(x == y && y == z).
I wish I could write if(x == y and z) but there is no syntax for that. What can I do?

Look at this solution. Also, is seems to be a good example of using monads, also known as Computation Expressions. Surprisingly to myself, it is fairly fast.

// Generic
let inline mOp1<'a> op sample x = op sample x, sample
let inline mOp2<'a> op1 op2 (b, sample) x = op1 b (op2 sample x), sample

// Implementation for (=) and (&&)
let (==) = mOp1 (=)
let (&=) = mOp2 (&&) (=)

// Use
let ret1 = a == b &= c &= d &= e |> fst
Read more...Collapse )

P.S. If you like it, you may upvote it on StackOverflow. :)

ДеФюнес1, DeFunes1

Point-free function application in F#

В коммуне по-прежнему тихо, потому подумалось, что эта мини-статья будет кому-то интересна. Не все знают, как использовать duck-typing для применения не-последнего аргумента.
Модератору: не знаю, какие метки ставить. :( И не знаю: а ссылки на SO вообще можно, да? :-)

Originally posted by bytebuster463 at Point-free function application in F#
Pointless notation in F# is a powerful mechanism for coding, allowing the source be free of burdening arguments. Combined with strong typing it makes F# code very expressive.
Say you have (+) operator which has type of int -> int -> int.
You may define your custom function:

let add2_version1 x = x + 2

This function will have type of int -> int which means it takes an int and returns an int.
This syntax is equal to:

let add2_version2 x = (+) 2 x

or

let add2_version3 x = ((+) 2) x

As we see, ((+) 2) is a function itself, and x is applied to it. So we can simplify our function:

let add2_version4 = (+) 2

But what if our operator is not symmetric, and we need to apply the first argument? Look at this question on StackOverflow:

How can I create a partial function application for a non-symmetric operator such as the modulus operator with regards to the first argument without any argument names in F#? My first attempt was let mod10 = (%) 10 which of course translates to mod10(x) = 10 mod x instead of the desired mod10(x) = x mod 10.

Certainly, this is possible!

let mod10 = (%) >> (|>) 10

How did we get it? Simple! The following expressions are equal:

let m1 x = x % 10                    
let m2 x = (%) x 10                  // x (op) y = (op) x y
let m3 x = ((%) x) 10                // f x y = (f x) y
let m4 x = 10 |>         ((%) x)     // f x = x |> f
let m5 x = ((|>) 10)     ((%) x)     // x |> f = (|>) x f
let m6 x = ((%) x)    |> ((|>) 10)   // f x = x |> f
let m7 x = (x |> (%)) |> ((|>) 10)   // (op) x = x |> (op)
let m8 x = x |> ((%)  >> ((|>) 10))  // f(x) |> g = x |> (f >> g)
let m9   =       (%)  >> ((|>) 10)   // remove formal argument
let m10  =       (%)  >>  (|>) 10    // remove unnecessary parenthesis

ЗЫ. Если Вам понравилась эта статья, можно лайкнуть по ссылке :-)

F*

http://research.microsoft.com/en-us/projects/fstar/:
«F* is a new dependently typed language for secure distributed programming. It's designed to be enable the construction and communication of proofs of program properties and of properties of a program's environment in a verifiably secure way. F* compiles to .NET bytecode in type-preserving style, and interoperates smoothly with other .NET languages, including F#, on which it is based.

Self-certification of F*: We have verified the F* type checker using F* itself, using a novel bootstrapping technique called self-certification

http://research.microsoft.com/apps/pubs/?id=141708:
«We present F*, a full-fledged design and implementation of a new dependently typed language for secure distributed programming. Unlike prior languages, F* provides arbitrary recursion while maintaining a logically consistent core; it enables modular reasoning about state and other effects using affine types; and it supports proofs of refinement properties using a mixture of cryptographic evidence and logical proof terms. The key mechanism is a new kind system that tracks several sub-languages within F* and controls their interaction. F* subsumes two previous languages, F7 and Fine. We prove type soundness (with proofs partially mechanized in Coq) and logical consistency for F*.»

Via nponeccop.
ДеФюнес1, DeFunes1

Что-то тихо здесь

Посмотрел, что в коммуне слишком тихо, вот и попросился у уважаемого модератора права на запись. Давайте что-то обсудим, что ли. :)
Например, вот что есть в моём скромном маленьком проекте (на вебе уже живёт, но ссылку не даю, во избежание):
  1. Разбор естественного человеческого языка (тайского) с помощью FParsec. Сам автор ФПарсека, Stephan Tolksdorf, сказал, что он никогда не думал, что его детищем могут парсить натуральные языки. Скоро будет также лаосский, камбоджийский, санскрит и деванагари.
  2. Монадическая модель доказательства к логическому выводу, написанная с нуля (советы будут приняты с огромной радостью, ибо написано на коленке).
Read more...Collapse )

Релиз Nemerle 1.0

«12 мая 2011 года вышла в свет первая версия Nemerle 1.0.

В состав инсталлятора входит:
• Компилятор командной строки ncc.exe Nemerle 1.0 для .NET 2–3.5 и Mono 2.x.
• Модуль интеграции с IDE Microsoft Visual Studio 2008.
• Nemerle Express Edition — отдельная IDE на основе Microsoft Visual Studio Shell 2008 Isolated. Данная версия не требует наличия коммерческой версии Microsoft Visual Studio 2008. Для ее установки сначала скачайте и установите Microsoft Visual Studio Shell 2008 Isolated, а затем произведите установку Nemerle 1.0. При этом нужно выбрать вариант установки «Advanced» и убедиться, что пункт «Visual Studio Express Edition» выбран.
• Стандартная библиотека Nemerle и стандартная библиотека макросов.
• Набор дополнительных макробиблиотек — Nemerle Power Pack (ComputationExpressions, Nemerle.Xml, Nemerle.Peg, Nemerle.WPF, Nemerle.Aop, Nemerle.Linq).
• Компилятор в виде .NET-компонента (Nemerle.Compiler.dll).
• Плагин к компилятору позволяющий компилировать файлы C# 4.0.»
  • bik_top

Try F#

tryfsharp.org — это аналог tryhaskell.org. «In just a few minutes you can begin learning F# — no registration, log-ins or forms are required.»

«The F# Survival Guide» — аналог «Learn You a Haskell for Great Good!». «We wrote this book to introduce mainstream developers to the world of functional programming through the lens of F#, Microsoft's first fully-supported multi-paradigm language.»

fssnip.net. «This web site allows you to easily share F# source code snippets. It is similar to other Pastebin services, but focuses only on F#. On the other hand, it uses the F# language service to provide colorization and also generates HTML tool tips that show results of background type checking. This makes the F# code significantly more readable.»

(Via Habrahabr.)

Software People 2010

2010-04-22 в Москве пройдет конференция «Software People 2010». В числе выступающих значится и Дон Сайм с докладом «F# — Bringing Functional Programming into the Mainstream». На случай, если кто из участников сообщества будет присутствовать (что всем рекомендую, мероприятие обещает быть интересным) — убедительно прошу подробно конспектировать :)

Сергей Зефиров будет брать интервью, он предлагает задать вопросы: http://thesz.livejournal.com/1079695.html
  • bik_top

F# 1.9.9.9 February 2010 CTP

F# 1.9.9.9 February 2010 CTP
F# PowerPack — теперь отдельно на Codeplex.
(via RSDN)

Upd 2010-02-11
Microsoft Visual Studio 2010 F# Runtime 2.0 RC

Ну и к слову, недавно на channel9 вышла первая лекция Дона Сайма. Смотреть её, откровенно говоря, необязательно :) Будем надеяться, что остальные поживее будут.

Куда полезней посмотреть последнюю лекцию Эрика Мейера.