Описание тега pointfree

Бесточечный (также называемый бессмысленным) стиль определения функции состоит в том, чтобы выразить ее непосредственно в терминах существующих функций, без упоминания аргументов определяемой функции. Часто используется композиция функций и частичное применение.
2 ответа

Дилемма между точечной свободной функцией / замыканием и типом generic?

type Alignment = | Horizontal | Vertical let getMainAttr = function | Horizontal -> fst | Vertical -> snd let check alignment = let mainAttr = getMainAttr alignment mainAttr (2,3) |> ignore mainAttr (2.0, 3.0) // error val getMainAttr : _ar…
16 ноя '12 в 15:47
1 ответ

Не могу получить бессмысленную запись для компиляции в 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' with actual type `Bo…
03 сен '14 в 15:07
2 ответа

Что является производным, который показывает \x -> (x, x) в Haskell, эквивалентный join (,)?

В соответствии с pointfree: \x -> (x, x) эквивалентно: join (,) Какое происхождение показывает это?
18 апр '15 в 05:45
1 ответ

Стиль против производительности с использованием векторов

Вот код: {-# LANGUAGE FlexibleContexts #-} import Data.Int import qualified Data.Vector.Unboxed as U import qualified Data.Vector.Generic as V {-# NOINLINE f #-} -- Note the 'NO' --f :: (Num r, V.Vector v r) => v r -> v r -> v r --f :: (V.V…
06 ноя '13 в 04:09
3 ответа

Бессмысленная форма против стиля

Вы можете конвертировать -- tupleUnfold :: forall a. ((forall b. a -> b)) -> a -> ((b)) tupleUnfold :: Int -> ExpQ tupleUnfold n = do xs <- forM [1 .. n] (const . newName $ "x") y <- newName "y" let y' = varE y g (ps', es') x = (va…
21 ноя '10 в 00:16
1 ответ

Почему бессмысленная версия моей функции использует гораздо больше памяти

Я работал над проблемой Project Euler и получил файл на Haskell, который включал функцию, которая выглядела следующим образом: matches :: (a -> a -> Bool) -> a -> [(a, Int)] -> Int matches f cs = foldr (\(cs', n) a -> fromBool (f c…
18 июл '16 в 04:15
2 ответа

Просто и точка в winghci

Почему это работает... Just.(+3) $ 6.7 Just $ truncate 8.9 ... но не это? Just.truncate $ 8.9 Я попытался разрешить усечение до простого Double -> Int: let f :: Double -> Int; f = (\ x -> truncate x); ... но это не проблема... Just.f $ 5.6 &lt…
15 фев '14 в 20:00
1 ответ

Для оптимизированного карри необходим стиль без точек

Скажем, у нас есть (надуманная) функция, например: import Data.List (sort) contrived :: Ord a => [a] -> [a] -> [a] contrived a b = (sort a) ++ b И мы частично применяем его для использования в других местах, например: map (contrived [3,2,1]…
1 ответ

Бессмысленный стиль в шаблоне Haskell

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

Используйте функцию a → b в качестве "монадической" функции a → m b

В настоящее время я играю с основами Haskell и наткнулся на следующий "вариант использования": ghci> let divideTenBy x | x == 0 = Nothing | otherwise = Just (10 / x) ghci> let composed = divideTenBy <=< return . (*10) <=< divideTen…
01 апр '12 в 03:08
4 ответа

Кто-нибудь переворачивает (<$>)

Я нашел определение следующего (%) = flip fmap Я могу написать код, подобный следующему: readFile "/etc/passwd" % lines % filter (not . null) для меня это имеет больше смысла, чем альтернатива filter (not . null) &lt;$&gt; lines &lt;$&gt; readFile "…
05 ноя '09 в 03:12
2 ответа

Количество аргументов и бессмысленных в Хаскеле

При множественном сопоставлении с образцом разное количество аргументов невозможно, даже при отсутствии смысла! foo True b = b + 2 foo _ = id не работает например. Но foo True = (+2) foo _ = id делает. Иногда мы можем использовать бессмысленное испо…
14 июл '12 в 20:29
1 ответ

Может ли F# быть преобразован в стиль без очков?

При изучении темы, связанной с программированием, я наткнулся на инструмент для рефакторинга без баллов для Haskell в lambdabot, и мне было интересно, можно ли реорганизовать F# в стиль без баллов? Я не защищаю использование стиля pointfree, но расс…
22 июл '14 в 14:24
1 ответ

f x y = 3 + y/x в произвольной форме

Я пытаюсь выяснить бессмысленную форму f x y = 3 + y/x в Хаскеле. Я думал, что это будет f = (3.0+) . flip (/), но ответ f2 = curry $ (3.0+) . (uncurry $ flip (/)), который так же, как f1 = curry ((3.0+) . (uncurry (flip (/))))Например, ответ, котор…
31 май '17 в 15:19
3 ответа

Почему нет необходимости указывать параметр в этой функции?

Я довольно новичок в Haskell, и на этой неделе я нашел эту особенность в нескольких слайдах лекций. Я пытаюсь понять, почему следующая функция не должна включать параметр: -- Return all final segments of the argument, longest first -- (horrible runt…
28 июл '16 в 18:13
5 ответов

Какова общая схема написания функции в стиле pointfree?

Сейчас я прорабатываю 20 промежуточных упражнений на Хаскелле, и это довольно забавное упражнение. Это включает в себя реализацию различных экземпляров классов типов Functor а также Monad (и функции, которые занимают Functorс и Monadв качестве аргум…
1 ответ

Импорт и использование инфраструктуры Swift SnapshotTesting с Карфагеном

У меня возникают проблемы с запуском xcTests после импорта инфраструктуры SnapshotTesting, доступной по адресу -> https://github.com/pointfreeco/swift-snapshot-testing Сборка прошла успешно, но тест не пройден Я всегда получаю "Символ не найден", го…
11 дек '18 в 07:10
1 ответ

Применение аргументов к композиции функций в Haskell

Будучи новичком в Haskell, я не могу понять, почему выражениеhead . words “one two three four” выдает исключение и состав функции head . words должен применяться с $ оператор - выражение справа от него не нуждается в дальнейшей оценке, потому что эт…
02 май '13 в 18:11
1 ответ

Стиль pointfree для условной функции

Я хотел бы получить некоторую помощь в написании этого в стиле pointfree. Для контекста: функция принимает массив типов Either и возвращает тип Task. Тип задачи отклоняется с любым из типов Either, для которых задан левый набор. Тип задачи разрешает…
20 дек '15 в 17:46
3 ответа

Почему эта проверка типов не выполняется?

compress xs@(_:_:_) = (ifte &lt;$&gt; ((==) &lt;$&gt; head &lt;*&gt; head.tail) &lt;$&gt; ((compress.).(:) &lt;$&gt; head &lt;*&gt; tail.tail) &lt;*&gt; ((:) &lt;$&gt; head &lt;*&gt; compress.tail) ) xs Приводит к ошибке типа, но я не понимаю, почем…
22 окт '11 в 20:36