Публикации по теме 'monads'
Я не думаю, что это точно.
M(M(a)) => M(a) является членом M(x) => x
Я не думаю, что это точно.
Монада знает, как свернуть два функториальных вычисления, то есть что означает композиция для двух вычислений в одном и том же контексте.
Давайте посмотрим на экземпляр монады для функций и представим, что функции были монадами в Javascript. Я использую стрелочную функцию с собственным телом, чтобы было понятнее:
const chain = f => g => {
// returns a monad instance for functions
return x =>..
Вопросы по теме 'monads'
Поместите два монадических значения в пару и верните ее
Я играю с Parsec и хочу объединить два синтаксических анализатора в один с результатом, помещенным в пару, а затем передать ему другую функцию для работы с результатом синтаксического анализа, чтобы написать что-то вроде этого:
try (pFactor...
338 просмотров
schedule
11.08.2022
Значение некоторого синтаксиса, используемого в учебнике по монадам
Читая этот учебник по монадам, я обнаружил следующее выражение.
данные M a = Поднять исключение | Вернуть
тип исключения = строка
В нем говорится, что a используется как переменная типа и диапазон значений в Raise Exception и...
116 просмотров
schedule
23.02.2024
Как правильно квалифицировать типы для работы с (преобразованными) ST и случайными монадами
Вот мой код:
...
import System.Random ( RandomGen, next, split )
import qualified Data.Array.MArray as MAI
import Data.Array.ST.Safe( STUArray )
import Control.Monad.ST.Safe(ST)
import qualified Control.Monad.Random as CMR
import...
79 просмотров
schedule
07.11.2022
Haskell: функция, использующая нотацию do и возвращающая, т.е. целочисленное значение
Я хочу написать функцию, которая считывает некоторые данные, используя getLine , и возвращает, т.е. кортеж (Integer, Integer), но используя do-нотацию. Что-то вроде этого (конечно, это не работает):
fun :: (Integer, Integer)
fun = do
a <-...
2383 просмотров
schedule
13.02.2024
Связывание нескольких аргументов
В Хаскеле есть:
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Есть функция :(?)
bind2 :: Monad m => m a -> m b -> (a -> b -> m c) -> m c
309 просмотров
schedule
12.03.2024
Правильно помеченный AST
Я уже некоторое время пытаюсь создать тегированный AST. Давайте представим проблему:
data E a
= V a
| LitInt Int
| LitBool Bool
| FooIntBool (E a) (E a) -- er…
deriving (Eq,Show)
Проблема с этим фрагментом кода для меня...
170 просмотров
schedule
22.04.2024
Явное отслеживание чистых действий в монаде с побочными эффектами?
Как правило, существует безопасный способ extract из монадического действия, если оно является результатом вызова pure / return . Например. unsafePerformIO (pure 42) не повлияет на мир. Пока я только использую эти монадические операции, я в...
119 просмотров
schedule
04.03.2024
Попробуйте монаду в Java 8
Есть ли встроенная поддержка монады, которая занимается обработкой исключений? Что-то похожее на Try в Scala. Я спрашиваю, потому что мне не нравятся непроверенные исключения.
19242 просмотров
schedule
20.07.2022
Каков тип возврата 5 в Haskell, когда контекст не указан?
В этом вопросе ОП спрашивает, каков тип выражения return 5 и ответ уже был дан в этом вопросе: это общий тип, в чем можно убедиться, набрав
:t return 5
в интерпретаторе Haskell:
return 5 :: (Num a, Monad m) => m a
Конкретная...
655 просмотров
schedule
23.04.2024
Почему scala.util.Success.flatMap (Try.flatMap) снова использует try-catch после применения своего аргумента?
Ниже приведено определение flatMap , взятое из scala.util.Success.
final case class Success[+T](value: T) extends Try[T] {
def flatMap[U](f: T => Try[U]): Try[U] =
try f(value)
catch {
case NonFatal(e) => Failure(e)
}
}...
489 просмотров
schedule
30.07.2022
Экземпляр MonadFix для преобразователя монад интерпретатора, сгенерированного FreeT?
У меня есть упрощенная версия стандартного преобразователя монад интерпретатора, сгенерированного FreeT :
data InteractiveF p r a = Interact p (r -> a)
type Interactive p r = FreeT (InteractiveF p r)
p - это "приглашение", а r - это...
204 просмотров
schedule
11.11.2022
Haskell - как сгенерировать следующий ход в игре крестики-нолики с монадой списка
Я реализую игру в крестики-нолики для n * n доски в Haskell, и мне нужно сгенерировать все конфигурации доски, которые я могу получить на следующем шаге.
У меня доска определена следующим образом:
data Cell = E
| X
| O...
1377 просмотров
schedule
11.10.2022
Несоответствие типа монады
Я пытаюсь использовать монаду IO в приложении Spock. Следующий код не компилируется:
get "api/entities" $ do
entities <- loadEntities
let e1 : xs = entities
text $ note e1
loadEntities имеет тип IO [Entity]
Ошибка Couldn't...
78 просмотров
schedule
16.09.2022
Почему мое копирование кода haskell из книги «Функциональное программирование на Haskell» не может быть успешно интерпретировано?
Код выглядит следующим образом:
type Parser a = String -> [(a, String)]
retrn :: a -> Parser a
retrn v = \inp -> [(v, inp)]
parse :: Parser a -> String -> [(a, String)]
parse p inp = p inp
item :: Parser Char
item = \inp ->...
100 просмотров
schedule
25.11.2023
Монадический сторож с Либо
Я реализую проверку типов в Haskell. Основной сигнатурой функций проверки типов является
judge :: Term -> StateT Context (Either String) Type
Если проверка типов не удалась, она возвращает lift $ Left "Something went wrong" ....
1134 просмотров
schedule
19.09.2022
Ошибки ввода при использовании действия ввода-вывода в Haskell
Я только начал изучать Haskell и теперь застрял в работе с операциями ввода-вывода.
Вот код.
parseDnsMessage :: BG.BitGet DnsMessage
recQuery :: BS.ByteString -> String -> IO BS.ByteString
resolveName :: [Word8] -> [Word8] ->...
107 просмотров
schedule
13.04.2024
Как распечатать результат State Monad в Haskell?
Можно ли распечатать результат монады состояния в Haskell?
Я пытаюсь понять монады состояний, и в книге, которую я следил, предоставляет приведенный ниже код для создания монады состояний, но я борюсь с этой темой, поскольку не могу визуально...
1057 просмотров
schedule
26.09.2022
Рекурсивная привязка F # в вычислительных выражениях и хвостовая рекурсивность
Я пытаюсь понять, как правильно вызывать рекурсивные функции в вычислительных выражениях и не получать исключение переполнения стека. Насколько я понимаю, это довольно известная проблема, но до сих пор не могу понять суть. Может быть, у кого-нибудь...
387 просмотров
schedule
28.06.2022
Используйте Fluture с Ramda
Я использовал Bluebird для выполнения асинхронных задач, но теперь мне нужно делать много пустых / нулевых проверок / ошибок, и я не хочу спускаться по обычному маршруту if Else. Подумываю об использовании монад, но еще не разобрался полностью....
1783 просмотров
schedule
13.09.2022
Монадическое двойное связывание
Можно ли разрешить y как функцию f и x , если монады N и M односторонние?
x :: M (N X)
f :: X -> M (N Y)
-- pattern matching not allowed, one-way monads implied
y :: M (N Y)
y = _
Полные определения:
data X = X
data Y = Y...
69 просмотров
schedule
18.03.2024