Описание тега 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-действий под ней. Моя установка теперь выг…
26 янв '19 в 11:41
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 &…
13 ноя '16 в 20:21
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), я столкнулся с проблемой циклических зависимостей. Я выполняю проверку / выво…
13 авг '17 в 20:07
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вместо этого монадный преобразователь, поскольку я хотел бы иметь несколько изменяемых переменных р…
16 авг '18 в 09:59
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