首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OverloadedLabels的QuasiQuotes

使用OverloadedLabels的QuasiQuotes
EN

Stack Overflow用户
提问于 2020-10-01 20:48:01
回答 2查看 58关注 0票数 4

我正在尝试使用here包中的OverloadedLabelsQuasiQuotes。使用普通镜头可以工作,但#foo在编译过程中会因解析错误而失败。field @"foo"也是如此。这是不是有更深层次的原因,或者可能是here的内插式解析器中的错误?

代码语言:javascript
复制
{-# language DataKinds #-}
{-# language DeriveGeneric #-}
{-# language DerivingStrategies #-}
{-# language OverloadedLabels #-}
{-# language OverloadedStrings #-}
{-# language TypeApplications #-}
{-# language QuasiQuotes #-}

import Control.Lens
import Data.Text (Text)
import qualified Data.Text.IO as T
import Data.Generics.Product
import Data.Generics.Labels
import Data.String.Here
import GHC.Generics (Generic)

data Test = Test
  { name :: Text
  } deriving stock (Eq, Show, Generic)

_name :: Lens' Test Text
_name f (Test a) = fmap (\a' -> Test a') (f a)

t :: Test
t = Test "test"

test :: IO ()
test = do
  -- ok
  T.putStrLn $ t ^. field @"name"
  T.putStrLn $ t ^. #name
  putStrLn [i|${t ^. _name}|]

  -- parse error
  putStrLn [i|The name is ${t ^. field @"name"}|]
  putStrLn [i|The name is ${t ^. #name}|]

#name的错误

代码语言:javascript
复制
test.hs:36:12: error:
    • Exception when trying to run compile-time code:
        Failed to parse interpolated expression in string: The name is ${t ^. #name}
(line 1, column 25):
0
SrcLoc "" 1 6
Parse error in expression: t ^.

CallStack (from HasCallStack):
  error, called at src/Data/String/Here/Interpolated.hs:64:33 in here-1.2.13-HU0AD0x0dD36rY9YuL1gwE:Data.String.Here.Interpolated
      Code: Language.Haskell.TH.Quote.quoteExp
              i "The name is ${t ^. #name}"
    • In the quasi-quotation: [i|The name is ${t ^. #name}|]
   |
36 |   putStrLn [i|The name is ${t ^. #name}|]
   |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-02 03:59:04

看起来haskell-src-meta还不支持OverloadedLabelshaskell-src-exts解析器有an OverloadedLabels case,但是haskell-src-metathe ToExp instance for Exp中没有它的用例。我猜来自haskell-src-meta的“不受支持”的错误消息正在被here中的错误处理所吞噬。

票数 2
EN

Stack Overflow用户

发布于 2021-10-22 16:34:48

为了防止其他人偶然发现这一点,我在haskell-src-meta中创建了一个PR来解决这个问题:https://github.com/DanBurton/haskell-src-meta/pull/19

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64155741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档