相关疑难解决方法(0)

获取Haskell记录的字段名称作为字符串列表?

说我有以下内容:

data Rec = Rec {
    alpha :: Int,
    beta  :: Double,
    phi   :: Float 
} 

sample = Rec 1 2.3 4.5
Run Code Online (Sandbox Code Playgroud)

我理解模板Haskell和reify函数可以得到记录的字段名称.那是:

print $(f sample) --> ["alpha", "beta", "phi"]
Run Code Online (Sandbox Code Playgroud)

还有一种说法是,这可以在没有Template Haskell的情况下完成.有人可以为此提供一个示例实现吗?

haskell reify template-haskell

15
推荐指数
1
解决办法
1818
查看次数

Haskell根据字段名字符串动态设置记录字段?

说我有以下记录:

data Rec = Rec {
   field1 :: Int,
   field2 :: Int
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写这个函数:

changeField :: Rec -> String -> Int -> Rec
changeField rec fieldName value 
Run Code Online (Sandbox Code Playgroud)

这样我可以将字符串"field1"或"field2"传入fieldName参数并让它更新相关字段?我理解Data.Data并且Data.Typeable在这里使用的是什么,但我无法想出这两个包.


我见过的库的一个例子就是cmdArgs.以下是关于如何使用此库的博客文章的摘录:

{-# LANGUAGE DeriveDataTypeable #-}
import System.Console.CmdArgs

data Guess = Guess {min :: Int, max :: Int, limit :: Maybe Int} deriving (Data,Typeable,Show)

main = do
    x <- cmdArgs $ Guess 1 100 Nothing
    print x
Run Code Online (Sandbox Code Playgroud)

现在我们有一个简单的命令行解析器.一些示例交互是:

$ guess --min=10
NumberGuess {min = 10, …
Run Code Online (Sandbox Code Playgroud)

haskell record

10
推荐指数
2
解决办法
1837
查看次数

标签 统计

haskell ×2

record ×1

reify ×1

template-haskell ×1