[...]希望在遗留代码库中找到变量foo在if条件下使用的所有位置。
我的代码是
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)添加实例声明?
答案 0 :(得分:8)
{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
import Data.Typeable
deriving instance Typeable Lexeme
应该有用。
然而,有一个陷阱,这只适用于要在库中定义此实例的情况。 Lexeme
将成为Typeable
的实例,如果任何其他库包含类似的实例,则会发生冲突。不幸的是,您确实无法添加全局Typeable
Lexeme
实例的所有内容都希望它在某个时候被添加到base
,或者使用{{1包装器并手动包装和展开newtype
。
Lexeme