You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell Lens代码报错:字符串/字符字面量末尾词法错误

问题分析与修复方案

错误原因

你遇到的lexical error in string/character literal at end of input错误,根源是字符串字面量的语法错误:
在代码的["super, "cali"]部分,第一个字符串"super,没有正确闭合引号——你在super,后直接写了"cali",这里的第二个引号会被解析器判定为第一个字符串的结束标记,导致后续的cali变成无引号包裹的非法内容,最终触发语法解析失败。

修复后的代码

根据语义需求,有两种修正方式:

方式1:两个独立的字符串(去掉逗号)

如果你的原意是"super"和"cali"两个独立元素,修正代码如下:

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE InstanceSigs #-}

import Control.Lens
import Control.Applicative

foldOf ( both . each ) (["super", "cali"], ["fragilistic", "expialidocious"])

方式2:保留逗号的单个字符串

如果你的原意是"super,"(带逗号)和"cali",修正代码如下:

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE InstanceSigs #-}

import Control.Lens
import Control.Applicative

foldOf ( both . each ) (["super,", "cali"], ["fragilistic", "expialidocious"])

修复效果说明

修正语法后,代码可正常编译运行:foldOf (both . each)会遍历元组中两个列表的所有元素,利用String的Monoid特性,将所有字符串拼接成一个完整结果——方式1会得到"supercalifragilisticexpialidocious",方式2会得到"super,cali fragilisticexpialidocious"。

内容的提问来源于stack exchange,提问作者user51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:10:30