繁体   English   中英

如何使用单例库为存在量化类型定义HasRep实例?

How to use the singletons library to define a HasRep instance for existentially quantified types?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想使用存在大小的图像窗口有几个原因:

  • 我想将不同大小的窗口打包到同一个列表中。
  • 我想为我的窗口类型创建一个Zip实例。

我正在使用此代码执行此操作:

-- | A "matrix" represented as a composition of sized vectors.
type Mat h w = Vector h :.: Vector w

-- | A handy alias for locating a window in the 2D plane.
type Orig = (Integer,Integer)

-- | An attempt at using `singletons` to define windows.
data Wind :: Nat -> Nat -> Type -> Type where  -- height -> width
  Wind
    :: (KnownNat h, KnownNat w)
    => { img  :: Mat h w a  -- ^ image data matrix
       , ll   :: Orig       -- ^ position of lower-left corner
       , dflt :: a          -- ^ out-of-bounds value
       } -> Wind h w a

data SomeWind a :: Type where
  MkSomeWind :: Sing h -> Sing w -> Wind h w a -> SomeWind a

现在,我需要为SomeWind类型创建一个HasRep实例:

import qualified ConCat.Rep as R

instance R.HasRep (SomeWind a) where
  type Rep (SomeWind a) = ???
  repr (MkSomeWind _ _ (Wind im orig def)) = (im, (orig, def))
  abst (im :: (Vector h :.: Vector w) a, (orig, def)) =
    MkSomeWind (SNat :: Sing h) (SNat :: Sing w) (Wind im orig def)

我有一种唠叨的预感,我应该能够使用单身人士库来帮助我取代“???” 上面有正确的定义,但我无法弄清楚如何。

有人可以帮忙吗?

问题暂未有回复.您可以查看右边的相关问题.
2 类型约束的存在量化

我不确定为什么ko没有进行类型检查。 有没有特别启发性的解释? 编译器提到 编辑:在Oleg的注释中找到了一个很好的解决方案来绕过这个,这是专门化类型,以便类型应用程序删除多态,添加实例 然后我们有 ...

3 Scala:对多态类型的单例实例使用Nothing

给出了像多态的特征 人们可能希望实现各种专门的实例,例如 现在,经常需要的变换也是身份变换。 对于所有类型T,最好只使用一个单例实例,而不是为每个类型T专门设置标识。我的问题是:在Scala中实现此目的的最佳方法是什么? 这是我到目前为止所发现的:看看List [T]如何 ...

4 模拟函数返回类型中的存在量化

有时候我需要返回存在量化类型的值。 当我使用幻像类型时(例如表示平衡树的深度),这种情况最常发生。 AFAIK GHC没有任何exists量词。 它只允许存在量化的数据类型 (直接或使用GADT)。 举个例子,我想要这样的函数: 到目前为止,我有两个可能的解决方案,我将添加作 ...

5 使用实例变量在初始化时定义单例方法

我正在尝试优化一些代码,而我想改为在每个方法调用中检查一个值,只需定义该方法以使用已经预先计算的检查来响应,因为这种检查不会在实例的整个运行过程中发生变化。 我决定为创建的每个实例定义该方法的不同版本。 这种方式或多或少: 发生的事情是变量发生了一些奇怪的事情:变量在class ...

8 使用 Nat 的代数数据类型(单例库)

我一直在尝试声明一个代数数据类型以使用单例库在类型级别进行操作。 如果我不在构造函数中使用Nat 、 Symbol 、 Integer或String ,我可以毫不费力地做到这一点。 例如: 但是如果我为Nat或Integer更改Bool ,它就会失败。 如何定义代数数据类型以与在类型级别采用N ...

10 使用单例而不是全局静态实例

我今天遇到了一个问题,一位朋友建议我使用全局静态实例或更优雅地使用单例模式。 我花了几个小时阅读关于单身的事情,但有些事情仍然让我感到厌烦。 背景:我想要完成的是创建API的实例并在我的所有类中使用这个实例(而不是建立新的连接等)。 似乎有大约100种创建单例的方法,但在yoda的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM