Convince研究:如何说服GHC这个模式同义词是完整的

关于Convince研究的问题,在synonyms convince中经常遇到, 我正在使用GHC 9.0.1。我有这个 typeclass:

我正在使用GHC 9.0.1。我有这个 typeclass:

{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeCl #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
import Data.Kind
type Has :: ((Type -> Type) -> Type) -> (Type -> Type) -> Type -> Constraint
class Has r_ m env | env -> m where
  dep :: env -> r_ m

这个(诚然很奇怪)rank-2 函数:

makeCaller :: forall env m . env -> forall r_ x. Has r_ m env => (r_ m -> x) -> x
makeCaller env = \f -> f (dep env)

我想隐藏这个pattern synonym背后的视图模式的使用:

pattern Call :: forall env m . (forall r_ x. Has r_ m env => (r_ m -> x) -> x) -> env
pattern Call env <- (makeCaller -> env)

这实际上工作正常,除了一件事:在 monadic 上下文中,它需要来自 monad 的MonadFail约束。我想通过将模式同义词标记为COMPLETE来删除对MonadFail的需要:

{-# COMPLETE Call #-}

唉,它不工作:

* A type signature must be provided for a set of polymorphic pattern synonyms.
* In {-# COMPLETE Call #-}

我不知道应该在 pragma 中给出什么签名。将整个forall env m . (forall r_ x. Has r_ m env => (r_ m -> x) -> x) -> env给出解析错误。

有没有办法将模式同义词标记为COMPLETE

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(781)
Conda是什么:conda的构建字符串的含义是什么 (build meaning)
上一篇
Ccd相机的像素:Opencv相机百万像素 Android
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(34条)