gpt4 book ai didi

haskell - 如何为 Typeable 添加实例声明

转载 作者:行者123 更新时间:2023-12-02 17:02:06 25 4
gpt4 key购买 nike

[...] wants to find all the places in a legacy codebase that a variable foo is used in the conditional of an if.

———— Why Haskell Is Worth Learning

我的代码是

import Language.C
import Data.Generics
import Control.Monad
import Text.Read

parseAndFindFoos :: FilePath -> IO (Either ParseError [Position])
parseAndFindFoos path = liftM (fmap findFooLocations) (parseCFilePre path)
findFooLocations input = fmap posOf (listify isIfOfInterest input)
isIfOfInterest (CIf cond _ _ _) = not (null (listify isFooIdent cond))
isFooIdent (Ident name) = (name == "foo")

如何为(Typeable Lexeme)添加实例声明?

最佳答案

{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
import Data.Typeable

deriving instance Typeable Lexeme

应该可以。

但是,有一个陷阱,并且只有在库中定义此实例时才真正适用。 Lexeme 将成为 Typeable 的实例,如果任何其他库包含类似的实例,则会发生冲突。不幸的是,为了确保不添加 Lexeme 的全局 Typeable 实例,您真正能做的就是希望它被添加到 base某些时候,或者使用 newtype 包装器并手动包装和解开 Lexeme

newtype LexemeWrapper = WrapLexeme { unwrapLexeme :: Lexeme } deriving Typeable

关于haskell - 如何为 Typeable 添加实例声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com