Вопросы по теме 'higher-rank-types'

Документация STArray для новичков и вопросы, связанные с состоянием/ST
Мне трудно понять STArray из документации и других руководств/обсуждений, которые я нашел в Google. У меня есть еще несколько связанных вопросов ниже. Согласно документации, STArray являются Изменяемые упакованные и неупакованные...
6169 просмотров
schedule 08.10.2022

Какова цель Rank2Types?
Я не очень разбираюсь в Haskell, поэтому это может быть очень простой вопрос. Какие языковые ограничения действуют Rank2Types решить? Разве функции в Haskell не поддерживают полиморфные аргументы?
13207 просмотров

Понимание псевдонима типа ранга 2 с ограничением класса
У меня есть код, который часто использует функции, которые выглядят как foo :: (MyMonad m) => MyType a -> MyOtherType a -> ListT m a Чтобы попытаться сократить это, я написал следующий псевдоним типа: type FooT m a = (MyMonad m)...
702 просмотров

Есть ли преимущества использования Rank2Types в пользу RankNTypes?
Насколько мне известно, разрешимый алгоритм проверки типов существует (только) для типов ранга 2. Использует ли GHC как-то этот факт, и имеет ли он какое-то практическое значение? Существует ли также понятие основных типов для типов ранга 2 и...
937 просмотров

Особые случаи при обработке типов более высокого ранга в GHC?
Рассмотрим этот пример из сеанса GHCI: Prelude> :set -XRankNTypes Prelude> let bar :: (forall a.[a]->[a]) -> [Int]; bar f = f [1,2,3] Это определяет функцию bar с типом ранга 2. Следовательно, вывод типа не должен быть в...
117 просмотров

Эта редукция не всегда выполняется в Haskell?
Я обнаружил, что могу сказать {-# LANGUAGE RankNTypes #-} f1 :: (forall b.b -> b) -> (forall c.c -> c) f1 f = id f (и HLint сказал мне, что я могу сделать здесь «эта-уменьшение»), но f2 :: (forall b.b -> b) -> (forall c.c...
873 просмотров
schedule 21.12.2022

Чисто прикладной анализатор с использованием альтернативы
В предыдущем сообщении пользователь предложил реализацию чисто аппликативного синтаксического анализатора для Haskell (исходный код из здесь ). Ниже приведена частичная реализация этого парсера: {-# LANGUAGE Rank2Types #-} import...
485 просмотров

О вложенных типах подвески CPS
Начнем со знакомого типа приостановленных вычислений CPS, (a -> r) -> r , который пишется как Cont r a на языке mtl . Мы знаем, что он изоморфен a , пока он остается полиморфным в r . Если мы вложим этот тип, мы получим этот тип ранга...
128 просмотров

Почему аннотация этого типа неверна?
Я попытался следовать статье Габриэля Гонсалеса и столкнулся с несоответствием типов . Рассмотрим следующий короткий модуль: {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE Rank2Types #-} module Yoneda where newtype F a = F a deriving (Show,...
151 просмотров