Вопросы по теме 'higher-rank-types'
RankNTypes и область действия `forall '
В чем разница между ними?
{-# LANGUAGE RankNTypes #-}
f :: forall a. a -> Int
f _ = 1
g :: (forall a. a) -> Int
g _ = 1
В частности, почему я получаю ошибку с g () ?
ghci> f ()
1
ghci> g ()
<interactive>:133:3:...
752 просмотров
schedule
21.10.2021
Можно ли реализовать сложение набранных цифр Чёрча, используя итеративное приращение?
Я не могу найти способ определить добавление как повторяющееся приращение, несмотря на то, что это возможно на нетипизированном языке. Вот мой код:
{-# LANGUAGE RankNTypes #-}
type Church = forall a . (a -> a) -> (a -> a)
zero ::...
264 просмотров
schedule
24.09.2021
Какие применения вы нашли для типов более высокого ранга в Haskell?
Типы более высокого ранга выглядят очень весело. Этот пример взят из викибука Haskell :
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
Теперь мы можем оценить foo id без взрыва компилятора. За этим примером в книге...
2010 просмотров
schedule
26.02.2022
Создание методов, привязанных к записям в Haskell
Я создаю ленивый, функциональный DSL , который позволяет пользователям определять неизменяемые структуры с методами (что-то вроде классов из ОО-языков, но они не изменяемы). Я компилирую код этого языка в код Haskell.
Недавно я столкнулся с...
698 просмотров
schedule
06.03.2022
Выполнение количественной оценки ранга n в Идрисе
В Idris 0.9.12 я могу делать только типы rank-n довольно неуклюже:
tupleId : ((a : Type) -> a -> a) -> (a, b) -> (a, b)
tupleId f (a, b) = (f _ a, f _ b)
Мне нужны подчеркивания везде, где есть приложение типа, потому что Идрис...
1672 просмотров
schedule
02.04.2022
Сворачивание полиморфного списка в Haskell
У меня есть коллекция записей разных типов в большом приложении Haskell, которые ссылаются друг на друга. Все задействованные типы реализуют общий класс типов. Класс типов содержит функции, которые работают с переменной и всеми ее дочерними...
1235 просмотров
schedule
28.04.2022
Высокоранговые и непредикативные типы
Я хочу реализовать следующую функцию stripPrefixBy :
-- psuedo code signature
stripPrefixBy :: forall a. [forall b. a -> Maybe b] -> [a] -> Maybe [a]
stripPrefixBy [] xs = Just xs
stripPrefixBy _ [] = Nothing
stripPrefixBy (p:ps) (x:xs)...
887 просмотров
schedule
10.05.2022
Странная ошибка при использовании переменных типа с областью действия и комбинатора y в haskell
Итак, я играю с y-комбинатором и анонимными функциями и столкнулся с этой странной ошибкой:
Couldn't match expected type `t0 -> t1 -> t2'
with actual type `forall b. b -> [b] -> [b]'
The lambda expression `\ (n :: Int)...
404 просмотров
schedule
16.06.2022
Развернуть монаду STT в стеке трансформатора?
Этот вопрос, по-видимому, связан с проблемой, обсуждаемой здесь и здесь . К сожалению, мое требование немного отличается от этих вопросов, и данные ответы ко мне не относятся. Я также не очень понимаю, почему runST не набирает check в этих...
60 просмотров
schedule
25.07.2022
Сопоставление с образцом предполагаемого типа
Почему приведенный ниже тип не проверяется? Тип _ выводится как Double.
{-# LANGUAGE ScopedTypeVariables, Rank2Types #-}
module Main (main) where
data D a = D a
main =
let
n = D (1 :: forall a. (Floating a) => a)
in
case n of...
97 просмотров
schedule
05.09.2022
Как именно работают синонимы типов?
Как получается, что следующий тип проверяет
{-# LANGUAGE RankNTypes #-}
module Main where
class Foo a where
type FunFoo = (Foo a) => a -> IO ()
data Bar = Bar {
funFoo :: FunFoo
}
setFunFoo :: FunFoo -> Bar -> Bar
setFunFoo...
189 просмотров
schedule
19.11.2022
Необходимость обертки экзистенциального типа
Оказывается, на удивление сложно правильно использовать экзистенциальные типы/типы ранга n, несмотря на очень простую идею, стоящую за ними.
Почему необходимо оборачивать экзистенциальные типы в data типы?
У меня есть следующий простой пример:...
374 просмотров
schedule
10.12.2022
Ссылочная прозрачность с полиморфизмом в Haskell
Скажем, у меня есть функция:
f :: Int -> (Rational, Integer)
f b = ((toRational b)+1,(toInteger b)+1)
Я хочу абстрагироваться от (+1) следующим образом:
f :: Int -> (Rational, Integer)
f b = (h (toRational b)
,h (toInteger...
386 просмотров
schedule
22.11.2022
Как эта-редукция хорошо типизированной функции может привести к ошибке типа?
Я экспериментировал с линзами ван Лаарховена и столкнулся с проблемой, когда проверка типов отклоняла форму с сокращенным значением эта хорошо типизированной функции:
{-# LANGUAGE RankNTypes #-}
import Control.Applicative
type Lens c a = forall...
552 просмотров
schedule
22.03.2023
Кодировать эквивалент полиморфизма ранга 2 в SML
runST — это функция Haskell, которая статически ограничивает время жизни ресурса с помощью типов. Для этого используется полиморфизм второго ранга. Более простая система типов стандартного ML предлагает только полиморфизм ранга 1.
Может ли...
328 просмотров
schedule
07.03.2023
Использование монадического типа ранга 2
Вот код:
{-# LANGUAGE RankNTypes, FlexibleContexts, ScopedTypeVariables #-}
module Foo where
import Data.Vector.Generic.Mutable as M
import Data.Vector.Generic as V
import Control.Monad.ST
import Control.Monad.Primitive
import Control.Monad...
145 просмотров
schedule
16.12.2022
новый тип с RankNTypes
Если я хочу объявить newtype таким образом, чтобы тип типа значения был ограничен экземпляром для класса типов, похоже, я могу сделать это с помощью:
{-# LANGUAGE RankNTypes #-}
newtype ShowBox = ShowBox (forall a. Show a => a)
GHC...
520 просмотров
schedule
06.03.2024