Описание тега 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 | [] -> [] | head::tail when (x%2 = 0) -> head :: listRec (tail) (x+1) | head::tail -> listRec (tail) (x+1) listRec listToGoUnder 0 У…
23 фев '12 в 12:54
2
ответа
Еще один вопрос ограничения ценностей
В следующем коде Seq.generateUnique ограничен, чтобы иметь тип ((Assembly -> seq<Assembly>) -> seq<Assembly> -> seq<Assembly>), 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 -> match !cache with | Some y -> y | None -> cache := Some x; x) слабо полиморфизм, но с участием ref, Любые способы написать слабо полиморфную функцию без участия ref или же partial application?
11 окт '14 в 11:52
1
ответ
Почему этот слабо полиморфный тип?
module type M = sig type ('k, 'v) t val foo : 'k -> ('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 [] -> [] | h::t -> f h::my_map f t;; val my_map : f:('a -> 'b) -> 'a list -> 'b list = <fun> # let my_path_mapper …
29 апр '16 в 20:47
3
ответа
Есть ли у Scala ограничение по стоимости, например, ML, если нет, то почему?
Вот мои мысли по этому вопросу. Кто-нибудь может подтвердить, опровергнуть или уточнить? Я написал: Скала не объединяет ковариант List[A] с GLB ⊤, назначенным на List[Int], bcz afaics в подтипе "biunification" направление задания имеет значение. так…
03 фев '18 в 06:50
1
ответ
Ограничение значения в F#
У меня есть назначение F#, где я пытаюсь вычислить транспонирование матрицы. Достаточно просто, но я продолжаю получать ошибку ограничения значения и не могу понять, почему. Я справился со многими вопросами об ошибках VR, которые есть, но я все еще …
11 фев '13 в 17:39
3
ответа
Понимание ошибок ограничения значения F#
Я не понимаю, как работает ограничение значения в F#. Я прочитал объяснение в вики, а также документацию MSDN. Что я не понимаю, так это: Почему, например, это дает мне ошибку ограничения значений (взято из этого вопроса): let toleq (e:float<_>…
15 июл '09 в 13:37
2
ответа
Значение полиморфизма и "генерация исключения"
Согласно определению стандарта ML (пересмотренный): Идея состоит в том, что динамическая оценка неэкспансивного выражения не будет генерировать исключение и расширять область памяти, в то время как оценка экспансивного выражения могла бы. [§4.7, с19…
14 фев '15 в 03:18
2
ответа
Избавление от ошибок ограничения стоимости
в OCaml Objective Caml version 3.11.0 # let rec last l= match l with [] -> failwith("Empty list") |a::[] -> a |a::r -> last r;; val last : 'a list -> 'a = <fun> # last [];; Exception: Failure "Empty list". В F# >let rec last l =…
15 июн '11 в 13:41
3
ответа
Ограничение значения при отсутствии общих параметров
Я получаю ошибку ограничения значения на let makeElem в следующем коде: let elemCreator (doc: XmlDocument) = fun name (value: obj) -> let elem = doc.CreateElement(name) match value with | :? seq<#XmlNode> as childs -> childs |> Seq.it…
23 фев '12 в 13:04
1
ответ
Подкрадывающиеся линзы и CPS за пределами ценового ограничения
Я кодирую форму линз van Laarhoven в OCaml, но у меня возникли трудности из-за ограничения стоимости. Соответствующий код выглядит следующим образом module Optic : sig type (-'s, +'t, +'a, -'b) t val lens : ('s -> 'a) -> ('s -> 'b -> '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 | [] -> [], [] | [x] -> [x], [] | x1::x2::xs -> 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 |> 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