在构建 Haskell Reader 箭头时,"ask" 的哪个实现摆脱了无关参数?

When building a Haskell Reader Arrow, what implementation of "ask" gets rid of the extraneous parameter?

昨天刚开始使用 Arrows。作为练习,我决定尝试构建一个类似于 Control.Monad.Reader.Reader 的“Reader 箭头”。我将其命名为 EA(“环境箭头”)。问题跟在代码之后。

import Prelude hiding ((.), id)
import Control.Category
import Control.Arrow
import qualified Data.Bifunctor as BiF

newtype EA r a b = EA { runEA :: r -> a -> b }

instance Arrow (EA r) where
  arr f = EA $ const f
  first (EA f) = EA $ BiF.first . f
  second (EA f) = EA $ BiF.second . f

instance Category (EA r) where
  id = arr id
  (EA b) . (EA a) = EA $ \r -> b r . a r

ask :: EA r a r 
ask = EA const

test :: EA Int Int Int
test = proc i -> do
  f <- ask -< i -- How can I build an "ask" that doesn't need a parameter?
  returnA -< f

如何构建 ask 以便它可以使用 proc 表示法但不需要参数?换句话说,我想说 f <- ask 而不是 f <- ask -< i,因为从未使用过该参数。

做不到。 f <- ask 在箭头表示法中甚至无效 syntax。每个箭头都必须“应用于”proc 块中的某个参数。