Вопросы по теме 'pointfree'

найти уникальные матрицы из большей матрицы
Я довольно новичок в функциональном программировании, поэтому я прохожу некоторые практические упражнения. Я хочу написать функцию, по заданной матрице уникальных натуральных чисел, скажем 5х5, возвращающую набор уникальных матриц меньшего размера,...
435 просмотров
schedule 07.02.2024

Попытка написать функциональную точку бесплатно, GHCI не одобряет
В качестве упражнения я пытаюсь реализовать интересные части прелюдии вручную. Всякий раз, когда я вижу возможность пойти бесплатно, я использую ее. Однако это привело меня к кирпичной стене в самом неожиданном месте. Используя этот код: myelem...
396 просмотров
schedule 27.01.2023

Бесточечный стиль в Template Haskell
Рассмотрим следующую функцию Template Haskell: composeQ :: ExpQ -> ExpQ -> ExpQ composeQ = \x y -> [| $(x) . $(y) |] Можно ли исключить лямбда-выражение из правой части уравнения и записать composeQ в бесточечном стиле?
225 просмотров

Используйте функцию a → b как монадическую функцию a → m b
В настоящее время я играю с основами Haskell и наткнулся на следующий «прецедент»: ghci> let divideTenBy x | x == 0 = Nothing | otherwise = Just (10 / x) ghci> let composed = divideTenBy <=< return . (*10) <=< divideTenBy...
222 просмотров

Функция без точек не вызовет рекурсию, но нормальная функция будет здесь?
В качестве побочного вопроса здесь Что проще всего способ сделать что-то вроде делегирования многоадресной рассылки в F # Я думаю, может быть, лучше поднять полный вопрос с правильным заголовком. Эта версия не вызовет рекурсии: (Здесь notify...
115 просмотров

Краткий синтаксис для частичного в Clojure
Некоторое время назад, изучая Haskell, я влюбился в бесточечную нотацию и в особенно удобное приложение с частичными функциями — знаете, просто укажите аргументы. В Clojure у меня все время partial . Я думаю, что было бы неплохо иметь специальный...
940 просмотров
schedule 11.04.2022

Общий шаблон, включающий композицию функций (\a b -> f (g a) (g b))
Композиция f и g, которая выглядит как f :. g = \a b -> f (g a) (g b) это шаблон, который я очень часто встречаю в своем коде. Это похоже на композицию унарной функции, только f является двоичной, и я хочу, чтобы g применялось к обоим...
401 просмотров

($) относится к (.), как и `fmap`?
У меня есть функция funcM :: a -> b -> c -> IO (x, y) Я хочу написать функцию funcM_ :: a-> b-> c-> IO x так: funcM_ = fst `fmap` funcM -- error Я мог бы добавить обратно все точки, но кажется, что должно быть что-то,...
368 просмотров
schedule 19.04.2024

Возможно ли снижение эта?
Можно ли применить сокращение eta в приведенном ниже случае? let normalise = filter (\x -> Data.Char.isLetter x || Data.Char.isSpace x ) Я ожидал, что что-то вроде этого будет возможно: let normalise = filter (Data.Char.isLetter ||...
291 просмотров
schedule 04.05.2022

Не удается получить безточечную нотацию для компиляции в Haskell
Это работает unique :: (a -> Bool) -> [a] -> Bool unique p xs = 1 == length (filter p xs) Но теперь я хочу это в форме: unique = (== 1) . length . filter Сообщение об ошибке: Couldn't match expected type `[a] -> Bool'...
162 просмотров
schedule 29.05.2024

Создание бесточечной линзы не проверяет тип
В функции test я просматриваю список, генерирую линзы из его членов, а затем печатаю некоторые данные. Это работает, когда я использую точечный стиль вызова. Он не проверяет тип, когда я делаю его безточечным. Почему это так, и как я могу...
114 просмотров
schedule 24.07.2023

Безточечная конвертация
У меня есть некоторые функции перемещения/доступа для работы с моим типом сетки: cell :: Mesh a -> Int -> Maybe (Cell a) neighbour :: Mesh a -> Int -> Cell a -> Maybe (Cell a) owner :: Mesh a -> Cell a -> Maybe (Cell a)...
85 просмотров
schedule 18.09.2023

Понимание `ap` в бесточечной функции в Haskell
Я могу понять основы безточечных функций в Haskell: addOne x = 1 + x Поскольку мы видим x по обе стороны уравнения, мы его упрощаем: addOne = (+ 1) Невероятно получается, что функции, в которых один и тот же аргумент используется...
2974 просмотров

Добавить действие без изменения результата в нотацию рефакторинга
Я хочу последовательно скомпоновать два монадных действия в Haskell, отбросив любое значение, созданное вторым, и передав аргумент обоим действиям. В настоящее время я использую такой do-блок: ask = do result <- getLine putStrLn result...
128 просмотров

Бесточечная отладка
Итак, мы используем в работе очень хорошую библиотеку ramda , и это здорово, потому что мы можем использовать в основном бесточечный стиль кода. Проблема в том, что гораздо меньше мест, где можно посмотреть, когда что-то идет не так, указывает на...
1151 просмотров
schedule 15.04.2023

Составная функция без точек с расширенными аргументами
Я пытаюсь выяснить, существует ли шаблон для написания бесточечной составной функции, когда аргументы должны распространяться в каррированных составных функциях , т.е. (с Ramda): add_1_and_multiply = (add, mul) => R.compose(R.multiply(mul),...
76 просмотров
schedule 26.11.2023

Обдумывая название паттерна, наблюдаемого в Elm, и другие подобные случаи
В настоящее время я студент FP. Когда я смотрю на различные варианты синтаксиса, предлагаемые различными функциональными языками, я наткнулся на шаблон в примере кода Elm. Мне это интересно. Вот пример кода myList = [{foo = "bar1"},{foo =...
220 просмотров
schedule 23.04.2024

Диапазон безточечных труб с Ramdajs
У меня есть функция, которая создает диапазоны: const range = from => to => step => .... И я хочу создать другую функцию, которая что-то делает с этим диапазоном, но я хочу использовать pipe. Например, я хочу получить сумму...
122 просмотров

Эквивалентный сеттер, соответствующий геттеру .foo для типа записи Elm.
Мне нужно написать много геттеров и сеттеров для моей модели (это рекорд). Геттеры очень лаконичны, и я доволен этим. getFoo = .foo Это идеально подходит для использования в качестве встроенной функции без указания имени: Maybe.map .foo...
152 просмотров
schedule 28.12.2022

Замена символа в строке на строку в Haskell в бесточечном стиле
Идея состоит в том, чтобы написать замену функции, которая принимает три аргумента, подстановочный знак, строку подстановки и входную строку. Пример будет выглядеть как replace '*' "foo" "foo*" = "foobar" . Обычно это не было бы слишком большой...
93 просмотров
schedule 31.08.2022