higher-rank-types

    15热度

    1回答

    下面描述的所有实验都是用GHC 8.0.1完成的。 此问题是RankNTypes with type aliases confusion的后续行动。这个问题有归结为类型的像这样的功能... {-# LANGUAGE RankNTypes #-} sleight1 :: a -> (Num a => [a]) -> a sleight1 x (y:_) = x + y ...这是由类型检查

    1热度

    0回答

    Haskell wiki page上排名-N-类型告诉这类 forall a . a -> (forall b . b -> a) 有排名1.我相信这个事实,似乎可以理解为我(记住我已经知道如何确定函数的排名)。然而,当我试图写下面的代码: {-# LANGUAGE ExplicitForAll #-} foo :: forall a . a -> (forall b . b -> a)

    2热度

    2回答

    在之前的post中,用户提供了Haskell的纯应用解析器(代码最初来自here)的实现。下面是部分实现,语法分析器: {-# LANGUAGE Rank2Types #-} import Control.Applicative (Alternative(..)) import Data.Foldable (asum, traverse_) 类型: newtype Parser a =

    1热度

    1回答

    (修订版) 我已使用Free Monad到一个通用的数据存储的接口。我想将运行时用户选择的特定解释器(:: DataStore a - > IO a)与其他一些信息一起放入状态monad中。我似乎无法将任何东西放入数据结构的这个字段中。 我如何把一个值定义为较高级别类型的字段? 下面是一个最小的例子: {-# LANGUAGE RankNTypes, DeriveFunctor #-} dat

    2热度

    1回答

    这个问题显然与讨论的问题here和here有关。不幸的是,我的要求与这些问题略有不同,所给出的答案不适用于我。我也不太明白为什么runST未能在这些情况下输入检查,这没有帮助。 我的问题是这样的,我有一个代码段使用一个单子堆栈,或者更确切地说,一个单子: import Control.Monad.Except type KErr a = Except KindError a 的另一段代码需要

    13热度

    1回答

    在我的(威力不正确)的理解,下面的两个表应该是等价的: [1, "a"] :: [forall a. Show a => a] data V = forall a. Show a => V a [V 1, V "a"] :: [V] 然而,第一个是不能接受的,但第二个工作正常(与ExistentialQuantification)。 如果第一个列表不存在,map V :: ??? ->

    2热度

    1回答

    为什么不在下面的类型检查? _的类型被推断为Double。 {-# LANGUAGE ScopedTypeVariables, Rank2Types #-} module Main (main) where data D a = D a main = let n = D (1 :: forall a. (Floating a) => a) in

    0热度

    1回答

    我有一个类型: type DifferentiableFunction n a = (Function n a, List n (Function n a), String) 在其他地方,我定义: data Something where Operator :: Something -> (forall a . Floating a => DifferentiableFunction

    6热度

    1回答

    像Maybe (Lens' a b)这样的类型不起作用,因为Lens'是一种Rank-2类型,不能在没有-XImpredicativeTypes扩展名(在GHC中不支持)的扩展中包装在类型构造函数中。 因此什么是给将在道义上有型 foo :: A -> Maybe (Lens' B C) 一种可能性是将Maybe推迟到通过延续 foo' :: ∀ y . A -> (Lens' B C ->

    2热度

    1回答

    我正在尝试扩展(或试图找出是否有可能扩展)带有类型签名的函数,该类型签名已经达到我的知识范围,因为我是库使用哪些暴露相当多态的类型和API,更多的多态。 我使用的是persistent和hsqml,这两个库在时刻都有漂亮的毛茸茸的类型,至少对我而言。 我需要将persistent实体包装为hsqml“代理”对象才会暴露给QML(基本上是javascript)。 为此,我让自己成为帮手,叫做getS