Вопросы по теме 'do-notation'

Можно ли свернуть свой собственный синтаксический сахар (например, do-нотацию или стрелочную нотацию) в Haskell?
Ну, вопрос напрашивается сам собой. Предположим, я хочу реализовать какой-то специальный синтаксис просто для удовольствия. Является ли это возможным? Какие инструменты следует использовать?
832 просмотров
schedule 15.07.2023

Краткая нотация if-then-else в блоках выполнения в Haskell
Я не могу понять, как заставить работать краткую нотацию if-then-else, упомянутую в [ http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse ]. Это работает, import System.Environment main = do args <- getArgs if (args !!...
9098 просмотров
schedule 02.03.2023

Haskell ЕСЛИ иначе
input <- readLn if (input == 0) then putStr "0" else if (input ==1) then putStr "1" else if (input ==2) в таком сценарии, как использовать несколько putStr с then или else if ? когда я пытаюсь получить ошибку Type error...
5725 просмотров
schedule 29.04.2022

If/then/else в операторах do (Haskell)
У меня есть блок кода, который я написал, который не компилируется, потому что блок if/then/else не изложен так, как понимает компилятор, однако я не могу понять, как его переписать. что может. playRandomly board = do let vMoves...
1467 просмотров
schedule 08.10.2023

Монадическая нотация do внутри let, возможно ли это?
Рассмотрим следующий допустимый код Haskell module Main where main :: IO () main = do let x = f print x f :: Maybe (Int, Int) f = Just 3 >>= (\a -> Just 5 >>= (\b -> return (a, b))) где функция f может...
184 просмотров
schedule 08.03.2023

Что делает команда put в типичной функции, использующей монаду состояния?
Это пример из https://wiki.haskell.org/All_About_Monads Это пример использования State монады для передачи значения StdGen через последовательность команд генерации случайных чисел. Если я понимаю, что последний return делает правильно, он...
771 просмотров
schedule 04.04.2023

Как сгенерировать бесконечный список в Haskell на основе двух входных данных?
Мне нужно создать бесконечный список на основе двух входных данных. gen :: Int -> Int -> [Int] gen x y Каждый элемент должен быть (x * y), и x увеличивается на y на каждой итерации, и исходный x также должен быть в списке. Так gen...
1256 просмотров
schedule 11.02.2023

нотация do волшебным образом исправляет в качестве аргумента выражение, которое в противном случае было бы отвергнуто
В шаблонах Nim: в качестве продолжения этой проблемы у меня возникла идея обойти недоступность аргумента по умолчанию с помощью используя перегрузку или даже в этом случае обычную упаковку. Хотя было бы слишком хорошо, если бы что-то снова не...
54 просмотров
schedule 26.06.2022

Как ведет себя оператор ‹- в haskell?
Я понимаю (несколько) монады и понимаю, что оператор ‹- будет извлекать значение из монады. Но как это работает с разными типами? Как правило, я видел, как он используется для извлечения строк из монады IO. Но в приведенном ниже примере кода я...
133 просмотров
schedule 08.10.2022

Можно ли написать этот код без использования нотации do?
у меня есть функция bar :: MyType -> MyType -> [MyType] Я хотел бы иметь другую функцию: foo :: [MyType] -> [MyType] foo xs = do x <- xs y <- xs bar x y Можно ли написать foo без использования...
107 просмотров
schedule 27.11.2022

Как нотация `do` в Haskell узнает, какое значение нужно принять, если оно не определено возвратом?
У меня есть этот монадический объект. data Parser a = Parser (String -> Maybe (a, String)) instance Functor Parser where -- fmap :: (a -> b) -> Parser a -> Parser b fmap f (Parser pa) = Parser $ \input -> case pa input of...
253 просмотров
schedule 21.07.2022

Может ли сопоставление с образцом в do-notation/enumFromTo замедлить код Haskell?
Я решал довольно простую задачу: генерация всех убывающих последовательностей длиной L , состоящих из натуральных чисел от 1 до M в лексикографическом порядке. Тем не менее, я столкнулся с довольно странной проблемой. Посмотри: c :: (Ord...
230 просмотров

Почему я не могу вызвать функцию быстрой сортировки (randomList 10)?
У меня есть следующий код: import Data.Array import Control.Monad import Data.Functor import System.Random (randomRIO) randomList 0 = return [] randomList n = do r <- randomRIO (1,6) rs <- randomList (n-1) return (r:rs)...
84 просмотров

Могу ли я иметь отдельные функции для чтения и записи в текстовый файл в Haskell без использования «основной» функции?
Я делаю программу с использованием Haskell, которая требует простых функций сохранения и загрузки. Когда я вызываю функцию сохранения, мне нужно поместить строку в текстовый файл. Когда я вызываю load, мне нужно вытащить строку из текстового файла....
143 просмотров
schedule 21.05.2022

fmap в блок do завершается с ошибкой печати
Я пытаюсь понять, почему функция, которую я написал с блоком выполнения, не может быть переписана для fmap аналогичного лямбда-выражения по списку. У меня есть следующее: -- This works test1 x = do let m = T.pack $ show x...
89 просмотров
schedule 08.09.2022

объединение ввода getLine с массивом haskell вызывает ошибку типа
Я совсем новичок в Haskell. Я пришел из среды js, у меня есть простой массив students , в который я хочу втолкнуть некоторые студенческие объекты, но, к сожалению, Haskell не поддерживает объекты (если есть способ, я могу это сделать пожалуйста,...
292 просмотров
schedule 11.05.2022

Борьба с вводом-выводом при чтении файла конфигурации в Haskell
У меня есть входные данные, предназначенные для моих еще не написанных приложений Haskell, которые находятся в файле. Я не обновляю файл. Мне просто нужно прочитать файл и передать его в мою функцию Haskell, которая ожидает список строк. Но чтение...
76 просмотров
schedule 17.02.2023

Как нотация do в монаде означает в Haskell
Рассмотрим следующий сегмент кода import Control.Monad.State type Stack = [Int] pop :: State Stack Int pop = state $ \(x:xs) -> (x, xs) push :: Int -> State Stack () push a = state $ \xs -> ((), a:xs) stackManip :: State Stack Int...
198 просмотров

Haskell do notation edge case не может проверить тип
Я пытаюсь понять правила нотации do . Вот код, который проверяет тип: fff :: Maybe Int fff = do _ <- pure $ Just 100 (+10) <$> Just 50 Что в основном fff = (+10) <$> Just 50 . Я бы предположил, что приведенное...
109 просмотров
schedule 08.01.2023

Проблема с вложенными монадами при написании простого генератора URL QuickCheck
Еще один вопрос новичка, который, вероятно, возник из-за того, что я не понял Monadic do в Haskell: я хочу написать простой генератор QuickCheck для правильно сформированных URI, используя тип Text.URI из пакета modern-uri . Насколько я понимаю,...
65 просмотров
schedule 03.10.2022