Ссылка на этот код: F # Статические ограничения типа пользователя
Почему, например,
let gL = G_of 1L
[1L..100000L] |> List.map (fun n -> factorize gL n)
значительно медленнее, чем
[1L..100000L] |> List.map (fun n -> factorize (G_of 1L) n)
Посмотрев на Reflector, я вижу, что компилятор обрабатывает каждую из них по-разному, но для меня слишком много делается для того, чтобы расшифровать существенную разницу. Наивно я предполагал, что первая будет работать лучше, чем позже, потому что gL предварительно вычисляется, тогда как G_of 1L должен вычисляться 100 000 раз (по крайней мере, так выглядит).
[ Edit]
Похоже, что это может быть ошибка с F # 2.0/.NET 2.0/Release-mode, см. ответ и обсуждение @gradbot.