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