Описание тега st-monad

Строгая монада-преобразователь состояний. Вычисление типа ST s a преобразует внутреннее состояние, индексированное s, и возвращает значение типа a.
1 ответ

Рекурсивная функция, которая возвращает массив и список

Я пытаюсь создать рекурсивную функцию, которая для простоты, скажем, берет список и создает массив и список. Поскольку мне нужно как читать, так и записывать массив во время его создания, я использую изменяемый массив, чтобы я мог выполнять чтение и…
02 ноя '16 в 23:27
1 ответ

Использование и возврат нескольких STUArrays

Я работал над созданием и использованием нескольких STUArrays в вычислениях ST. Конкретные сценарии: создать несколько массивов, но вернуть только один из них создать несколько массивов, но не вернуть ни одного из них создать несколько массивов и ве…
20 фев '14 в 17:27
1 ответ

Изменить ST-зависимую среду в ReaderT - проблема с функцией `local`

Этот вопрос является продолжением этой темы: /questions/16491943/neyavnoe-vyipolnenie-stref-v-srede-vo-vremya-vyichislenij/16491953#16491953 Я спрашивал там о проведении STRef в ReaderTсреда и выполнение ST-действий под ней. Моя установка теперь выг…
0 ответов

Безопасно ли использовать unsafeThaw индексируемый распакованный вектор?

Я только что опубликовал этот код: import qualified Data.Vector.Unboxed as VU import qualified Data.Vector.Algorithms.Intro as VAlgo argSort :: (Ord a, VU.Unbox a) => VU.Vector a -> VU.Vector Int argSort xs = VU.map fst $ VU.create $ do xsi &…
1 ответ

Аргумент функции, который преобразуется в ST Monad

Как я могу написать следующую функцию tt, который в настоящее время имеет тип ошибки: t :: Int t = runST $ do ref <- newSTRef 10 readSTRef ref tt :: (STRef s a -> ST s a) -> Int tt f = runST $ do ref <- newSTRef 10 f ref ttTest = tt read…
27 окт '16 в 02:09
1 ответ

Использование Monad/ST для непараллельной передачи сообщений в изменчивом графе

Я пытаюсь разработать структуру данных для следующей ситуации. Структура графика Я планирую иметь граф узлов с невзвешенными, направленными ребрами: Graph = [Node] Каждый узел имеет: Некоторые TBD внутреннего (постоянного) состояния Очередь входящих…
11 сен '14 в 00:07
3 ответа

Как я могу реализовать перемешивание Фишера-Йейтса в Scala без побочных эффектов?

Я хочу реализовать алгоритм Фишера-Йейтса (перемешивание массива на месте) без побочных эффектов, используя STArray для локальных эффектов мутации и функционального генератора случайных чисел type RNG[A] = State[Seed,A] чтобы получить случайные целы…
25 май '15 в 04:00
1 ответ

Переодеть монаду ST как нечто похожее на государственную монаду

Вот сценарий: дана библиотека C с некоторой структурой в ее ядре и операциями над ней, обеспеченной обилием функций C. Шаг 1: Используя FFI Haskell, создается обертка. Имеет такие функции, как myCLibInit :: IO MyCLibObj, myCLibOp1 :: MyCLibObj ->…
03 июн '18 в 05:43
1 ответ

Смешивание ввода-вывода с ST-монадой - "переменная типа`s2'выйдет из области видимости "

Я решил упростить свой код, чтобы увидеть, в каких условиях возникла ошибка. Я начинаю с простого вложенного "S", похожего на ST s (STArray s x y) вот так: {-# LANGUAGE RankNTypes #-} import Control.Monad.ST import Control.Applicative data Foo s = F…
04 окт '14 в 04:43
1 ответ

Haskell ST Monad: Нет экземпляра для (MArray (STArray s) Int (ST s1))

Я изучал Haskell в течение последнего месяца или двух, и недавно решил эту проблему кодирования. Дополнительная задача заключалась в том, чтобы выполнить задачу без дополнительного пространства и в линейном времени, что я не думал, что это возможно …
11 сен '17 в 02:09
0 ответов

Haskell: обработка циклических зависимостей при завязывании узла

При написании языка программирования, который будет иметь локальный вывод типов (т. Е. Он будет способен выводить типы за исключением параметров функций, таких как Scala), я столкнулся с проблемой циклических зависимостей. Я выполняю проверку / выво…
1 ответ

Как улучшить этот алгоритм: 1) использовать массивы, 2) избежать конкатенации списков (отложенные списки?)?

Я пытался узнать, как работает STArray, но не смог. (Док плохой, или, по крайней мере, тот, который я нашел). В любом случае, у меня есть следующий алгоритм, но он использует много!!, что медленно. Как я могу преобразовать это, чтобы использовать мо…
15 окт '14 в 06:17
1 ответ

Рефакторинг монадического кода на Haskell, чтобы избежать копирования и вставки

Я написал следующий код на Haskell, используя монаду ST, и он работает. Мой единственный вопрос - как избежать копирования-вставки, показанного в приведенном ниже коде. Когда я попытался изменить код, я получил ошибки компилятора, которые я не мог п…
17 авг '17 в 15:56
2 ответа

Объедините монады ST и List в Haskell

С использованием StateT монаду трансформер, могу создать тип StateT s [] a, который изоморфен s -> [(a, s)], Теперь я бы предпочел использовать STTвместо этого монадный преобразователь, поскольку я хотел бы иметь несколько изменяемых переменных р…
1 ответ

Спецификация `State#`

Тем не менее, документация для STT говорит: Этот преобразователь монад не следует использовать с монадами, которые могут содержать несколько ответов, например, монадой списка. Причина в том, что токен состояния будет дублироваться в разных ответах, …
31 авг '18 в 13:42
0 ответов

Сопрограмма с StateT и ST и IO

Возникли проблемы с группой монад, которые я пытаюсь объединить. Я использую монад-сопрограмму, State и линзу (так как у меня глубоко вложенное состояние). У меня был первоначальный подход, где было рабочее решение. Главное здесь то, что я могу запр…
29 ноя '16 в 09:32
2 ответа

Haskell - монада двойного характера IO / ST?

У меня есть код, который в настоящее время использует монаду ST для оценки. Мне нравится не ставить IO везде, потому что runST метод дает чистый результат и указывает, что такой результат безопасно вызывать (по сравнению с unsafePerformIO). Однако, …
26 июл '11 в 22:24
2 ответа

Есть ли доказательство того, что runST действительно чист?

Монада ST, изначально разработанная Launchbury и Peyton Jones, позволяет программистам на Haskell писать императивный код (с изменяемыми переменными, массивами и т. Д.), Получая при этом чистый интерфейс с этим кодом. Конкретнее, полиморфный тип фу…
23 апр '17 в 19:39
1 ответ

Синтаксис объявления монады ST

Недавно я начал изучать основные библиотеки на Hackage, и есть повторяющаяся идиома, которую я не понимаю. Вот пример из модуля ST: instance Monad (ST s) where {-# INLINE (>>=) #-} (>>) = (*>) (ST m) >>= k = ST (\ s -> case (…
07 апр '17 в 22:38
1 ответ

Извлечение элементов из STArray (аналогично разархивированию)

У меня небольшая проблема с реализацией симуляции жидкости на основе частиц в Haskell для соревнования по программированию. В настоящее время у меня есть массив частиц, который изменяется на каждом этапе моделирования. Каждая частица представляет со…
19 ноя '12 в 15:01