Описание тега value-restriction

In functional programming, in particular the ML programming language family, the value restriction means that declarations are only polymorphically generalized if they are syntactic values (also called non-expansive).
1 ответ

Монады и ценностное ограничение в ОД

Ограничение значений в ML предотвращает обобщение типов в тех случаях, когда это может нарушить безопасность типов. Основная проблема, кажется, возникает из-за сочетания последовательных мутаций и полиморфных типов, как, например, в следующем коде O…
22 окт '16 в 13:32
1 ответ

Ограничение значения F#

Я прочитал все шаги по ограничению значения в F#, но я до сих пор не понимаю этого. У меня есть следующий код: type tree<'a> = | Nil | Node of (tree<'a> * 'a * tree<'a>) let rec flatten = function | Nil -> [] | Node ( Nil, b, Ni…
01 ноя '10 в 19:00
1 ответ

Ограничение значения F# для seq<obj>, но не для списка<obj>?

Ошибка ограничения значения: let myFn (s : string) (args : obj seq) = () let myOtherFn = myFn "" Ошибка ограничения без значения: let myFn (s : string) (args : obj list) = () let myOtherFn = myFn "" Зачем?
11 янв '16 в 23:41
1 ответ

Ограничение значения F# в пустом списке

У меня есть функция F#: let removeEven (listToGoUnder : _ list) = let rec listRec list x = match list with | [] -&gt; [] | head::tail when (x%2 = 0) -&gt; head :: listRec (tail) (x+1) | head::tail -&gt; listRec (tail) (x+1) listRec listToGoUnder 0 У…
23 фев '12 в 12:54
2 ответа

Еще один вопрос ограничения ценностей

В следующем коде Seq.generateUnique ограничен, чтобы иметь тип ((Assembly -&gt; seq&lt;Assembly&gt;) -&gt; seq&lt;Assembly&gt; -&gt; seq&lt;Assembly&gt;), open System open System.Collections.Generic open System.Reflection module Seq = let generateUn…
07 июл '11 в 19:35
2 ответа

Можно ли написать функцию слабо полиморфизма без использования ссылки или частичного применения?

let remember = let cache = ref None in (fun x -&gt; match !cache with | Some y -&gt; y | None -&gt; cache := Some x; x) слабо полиморфизм, но с участием ref, Любые способы написать слабо полиморфную функцию без участия ref или же partial application?
11 окт '14 в 11:52
1 ответ

Почему этот слабо полиморфный тип?

module type M = sig type ('k, 'v) t val foo : 'k -&gt; ('k, 'v) t end module M : M = struct type ('k, 'v) t = ('k * 'v) list let foo k = [] end В этом небольшом примере, почему бы M.foo 123 имеют слабо полиморфный тип, (int, '_a) M.t)?
11 сен '14 в 22:41
1 ответ

Почему этот код OCaml не подлежит ограничению значения

Я не понимаю, что функция (my_path_mapper) не подлежит ограничению значения. # let rec my_map ~f l = match l with [] -&gt; [] | h::t -&gt; f h::my_map f t;; val my_map : f:('a -&gt; 'b) -&gt; 'a list -&gt; 'b list = &lt;fun&gt; # let my_path_mapper …
29 апр '16 в 20:47
3 ответа

Есть ли у Scala ограничение по стоимости, например, ML, если нет, то почему?

Вот мои мысли по этому вопросу. Кто-нибудь может подтвердить, опровергнуть или уточнить? Я написал: Скала не объединяет ковариант List[A] с GLB ⊤, назначенным на List[Int], bcz afaics в подтипе "biunification" направление задания имеет значение. так…
1 ответ

Ограничение значения в F#

У меня есть назначение F#, где я пытаюсь вычислить транспонирование матрицы. Достаточно просто, но я продолжаю получать ошибку ограничения значения и не могу понять, почему. Я справился со многими вопросами об ошибках VR, которые есть, но я все еще …
11 фев '13 в 17:39
3 ответа

Понимание ошибок ограничения значения F#

Я не понимаю, как работает ограничение значения в F#. Я прочитал объяснение в вики, а также документацию MSDN. Что я не понимаю, так это: Почему, например, это дает мне ошибку ограничения значений (взято из этого вопроса): let toleq (e:float&lt;_&gt…
15 июл '09 в 13:37
2 ответа

Значение полиморфизма и "генерация исключения"

Согласно определению стандарта ML (пересмотренный): Идея состоит в том, что динамическая оценка неэкспансивного выражения не будет генерировать исключение и расширять область памяти, в то время как оценка экспансивного выражения могла бы. [§4.7, с19…
2 ответа

Избавление от ошибок ограничения стоимости

в OCaml Objective Caml version 3.11.0 # let rec last l= match l with [] -&gt; failwith("Empty list") |a::[] -&gt; a |a::r -&gt; last r;; val last : 'a list -&gt; 'a = &lt;fun&gt; # last [];; Exception: Failure "Empty list". В F# &gt;let rec last l =…
15 июн '11 в 13:41
3 ответа

Ограничение значения при отсутствии общих параметров

Я получаю ошибку ограничения значения на let makeElem в следующем коде: let elemCreator (doc: XmlDocument) = fun name (value: obj) -&gt; let elem = doc.CreateElement(name) match value with | :? seq&lt;#XmlNode&gt; as childs -&gt; childs |&gt; Seq.it…
23 фев '12 в 13:04
1 ответ

Подкрадывающиеся линзы и CPS за пределами ценового ограничения

Я кодирую форму линз van Laarhoven в OCaml, но у меня возникли трудности из-за ограничения стоимости. Соответствующий код выглядит следующим образом module Optic : sig type (-'s, +'t, +'a, -'b) t val lens : ('s -&gt; 'a) -&gt; ('s -&gt; 'b -&gt; 't)…
21 мар '15 в 19:49
1 ответ

Детали ошибки ограничения значения

let empties = Array.create 100 [] Дает ошибку ограничения значения:error FS0030: Value restriction. The value 'empties' has been inferred to have generic type val empties : '_a list []. Either define 'empties' as a simple data term, make it a functi…
07 янв '17 в 16:03
1 ответ

Определить тип перед использованием

Согласно документации MLton: Стандарт ML требует, чтобы типы были определены до их использования. [ ссылка] Не все реализации соблюдают это требование (например, SML/NJ), но ссылка на странице выше дает хорошее обоснование того, почему она может быт…
04 авг '13 в 03:14
3 ответа

Сохранение частично примененной функции родовым

Можно ли частично применить такую ​​функцию, как bprintf и предотвратить его ограничение на основе первоначального использования? Я хотел бы сделать следующее: let builder = new System.Text.StringBuilder() let append = Printf.bprintf builder append …
28 окт '10 в 21:27
1 ответ

Почему ограничение значения происходит с функцией MergeSort?

У меня очень простая реализация MergeSort в List. /// Divide the list into (almost) equal halves let rec split = function | [] -&gt; [], [] | [x] -&gt; [x], [] | x1::x2::xs -&gt; let xs1, xs2 = split xs x1::xs1, x2::xs2 /// Merge two sorted lists le…
01 окт '12 в 09:58
2 ответа

Как мне объявить универсальный параметр в F#?

Учитывая следующий код: let DisplayImpl logger data = data |&gt; Seq.iter logger printfn "" let Working = DisplayImpl (printfn "%O") [1;2;3] DisplayImpl (printfn "%O") ["a";"b";"c"] let NotWorking display = display (printfn "%O") [1;2;3] display (pr…
08 дек '11 в 01:06