我正在使用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
?
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(34条)