Вопросы по теме '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 просмотров

Какие применения вы нашли для типов более высокого ранга в Haskell?
Типы более высокого ранга выглядят очень весело. Этот пример взят из викибука Haskell : foo :: (forall a. a -> a) -> (Char,Bool) foo f = (f 'c', f True) Теперь мы можем оценить foo id без взрыва компилятора. За этим примером в книге...
2010 просмотров

Создание методов, привязанных к записям в Haskell
Я создаю ленивый, функциональный DSL , который позволяет пользователям определять неизменяемые структуры с методами (что-то вроде классов из ОО-языков, но они не изменяемы). Я компилирую код этого языка в код Haskell. Недавно я столкнулся с...
698 просмотров

Выполнение количественной оценки ранга 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 просмотров

Высокоранговые и непредикативные типы
Я хочу реализовать следующую функцию 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 просмотров

Развернуть монаду 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 просмотров

Как именно работают синонимы типов?
Как получается, что следующий тип проверяет {-# 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 просмотров

Необходимость обертки экзистенциального типа
Оказывается, на удивление сложно правильно использовать экзистенциальные типы/типы ранга n, несмотря на очень простую идею, стоящую за ними. Почему необходимо оборачивать экзистенциальные типы в data типы? У меня есть следующий простой пример:...
374 просмотров

Ссылочная прозрачность с полиморфизмом в 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 просмотров

Как эта-редукция хорошо типизированной функции может привести к ошибке типа?
Я экспериментировал с линзами ван Лаарховена и столкнулся с проблемой, когда проверка типов отклоняла форму с сокращенным значением эта хорошо типизированной функции: {-# LANGUAGE RankNTypes #-} import Control.Applicative type Lens c a = forall...
552 просмотров
schedule 22.03.2023

Кодировать эквивалент полиморфизма ранга 2 в SML
runST — это функция Haskell, которая статически ограничивает время жизни ресурса с помощью типов. Для этого используется полиморфизм второго ранга. Более простая система типов стандартного ML предлагает только полиморфизм ранга 1. Может ли...
328 просмотров

Использование монадического типа ранга 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