Описание тега computation-expression

Выражения вычислений в F# - это метод написания вычислений, которые можно комбинировать с использованием конструкций и привязок потока управления.
1 ответ

(Как) я могу сделать эту монадную привязку хвостовой рекурсивной?

У меня есть эта монада под названием Desync - [<AutoOpen>] module DesyncModule = /// The Desync monad. Allows the user to define in a sequential style an operation that spans /// across a bounded number of events. Span is bounded because I've …
1 ответ

Как правильно отбросить результат (монадического) вычисления в F#

В Хаскеле я могу написать: token: Parser a -> Parser a token p = do space v <- p space return v В F# я зашел так далеко: let token = compose { let! _ = space let! v = parser let! _ = space return v } Другими словами, я должен представить это н…
1 ответ

Выражение запроса самостоятельное соединение

Как я могу изменить это выражение запроса join пункт, чтобы я не должен был обернуть parent.ID в option просто присоединиться к кандидату child.ParentID который может быть None? query { for parent in d.People do join child in d.People on (Some paren…
1 ответ

Вернуть запущенную асинхронную<T> в F# функцию из вызова неасинхронной Func<T> из C#?

Допустим, я хочу вызвать из F# эту функцию C#: public static class Foo { public Bar Baz() { ... } } Проблема в том, что эта функция сильно загружает процессор, и я не хочу блокировать ее. К сожалению, библиотека C# не имеет Task&lt;Bar&gt; BazAsync(…
0 ответов

Ошибка при распространении вычислительного выражения монады

Я пытаюсь написать вычислительное выражение, которое эффективно направляет предупреждения и ошибки из всех зависимых let! аргументы и объединяет их с результатом данного расчета. Проблема в получении списка ошибок от всех используемых let! объединит…
03 ноя '14 в 05:34
2 ответа

Нужно ли использовать еще ветку в асинхронных выражениях?

Я хочу написать следующий код: let someAsync () = async { if 1 &gt; 2 then return true // Error "this expression is expected to have type unit ..." // I want to place much code here return false } F# почему-то считает, что мне нужно написать так: le…
07 апр '14 в 07:22
1 ответ

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

Я оглянулся и изо всех сил пытался получить ответ на это; Я уверен, что есть очевидный ответ, но я просто не могу его найти; или я столкнулся с ограничением цитат, которое не могу передать при использовании с выражениями вычислений. По сути, я хочу …
15 сен '15 в 12:06
0 ответов

Вычислительные выражения F# и параллельная библиотека задач

В последнее время я много работал с F#, а недавно написал небольшое приложение MVC с веб-проектом на C# и библиотекой классов F#, последняя из которых содержала основную часть кода. Я хотел использовать функцию асинхронных контроллеров более поздних…
1 ответ

Как выражения последовательности и полиморфная рекурсия играют вместе?

Этот проект действительно является источником вопросов для меня. Я уже узнал о полиморфной рекурсии и понимаю, почему это особый случай, и поэтому F# требует полных аннотаций типа. Для обычных функций мне, возможно, понадобится немного поиграть, но…
1 ответ

Проблема с выходом во вложенном рабочем процессе

Я пытаюсь написать свой собственный конструктор Either как часть моего квеста по изучению выражений вычислений в F#, но я столкнулся с проблемой, которая, по моему мнению, связана с методом Combine. Мой код до сих пор: type Result&lt;'a&gt; = | Fail…
13 ноя '17 в 20:23
0 ответов

Как реализовать вычислительное выражение с помощью пользовательских операций и выполнения операторов

Я пытаюсь реализовать diagnostics Вычислительное выражение для регистрации действий и и событий с использованием System.Diagnostics.DiagnosticSource NuGet. Но я не могу понять, как мое вычислительное выражение может выполнять регулярные операторы ме…
1 ответ

Как определить Yield и For для пользовательской операции вычисления в F#

Я работаю над DSL для своего приложения, и вот как я определил тип вычисления и конструктор: // expression type type Action&lt;'a,'b&gt; = Action of ('a -&gt; Async&lt;'b&gt;) let runAction (Action r) ctx = r ctx let returnF a = Action (fun _ -&gt; …
26 апр '14 в 07:30
1 ответ

F# переписать вычислительное выражение

Я изучаю продолжения, потому что я хочу использовать интересные сопрограммы... в любом случае, я хочу лучше понять одну реализацию, которую я нашел. Для этого я хочу переписать реализацию без использования вычислительного выражения (продолжение Mona…
2 ответа

Расширенные выражения вычислений без for..in..do

Под расширенными выражениями вычислений я подразумеваю выражения вычислений с пользовательскими ключевыми словами, определенными с помощью атрибута CustomOperation. Читая о расширенных выражениях вычислений, я сталкиваюсь с очень классным IL DSL от…
2 ответа

Выражения запросов F# дают

Я учусь F# и сейчас я читаю о выражениях вычислений и выражениях запросов для использования с поставщиками типов SQL. Я выполнял несколько простых задач, и в какой-то момент мне нужно было объединить (Union) 2 запроса, моя первая мысль после прочтен…
4 ответа

Избегать пирамиды гибели с помощью вычислительных выражений?

Я сталкивался с этим вопросом о "пирамиде гибели" в F#. Принятый ответ включает использование активных шаблонов, однако, насколько я понимаю, его также можно решить с помощью выражений вычислений. Как я могу удалить "пирамиду гибели" из этого кода с…
22 ноя '17 в 11:16
1 ответ

Механика дай! в выражениях вычислений

В настоящее время я работаю над серией выражений для вычислений на потрясающем веб-сайте fsharpforfunandprofit, и у меня возник вопрос относительно урока 4 "Обернутый тип" серии вычислений. Я попытался прочитать немного дальше, но есть важное поняти…
19 май '15 в 09:21
4 ответа

Превратить список Результата в Результат списка внутри выражения вычисления?

У меня есть Result&lt;'T, 'E&gt; list что я хотел бы превратить в единый Result&lt;'T list, 'E&gt; следуя этим правилам: Если есть Result является Error тогда результат должен быть Error Если результат Error это должно быть первым Error в списке Есл…
10 июн '18 в 23:58
2 ответа

Что не так с моим логическим выражением?

Ниже выражения вычисления, которое я пытаюсь реализовать. Значение обернуто в кортеж, где второй элемент кортежа представляет собой список строк, представляющих записи журнала по пути. type LoggerBuilder() = member this.Bind(vl : 'a * string list, f…
17 мар '14 в 08:59
1 ответ

Рефакторинг алгоритм как выражение вычисления?

Этот вопрос содержит спойлеры для тех, кто не выполнил задачу 61 Project Euler. Я написал ответ на проблему, которая была обязательной, поэтому я решил сделать более общий и функциональный ответ. Мне это удалось, но сейчас я пытаюсь выяснить, как из…