相关疑难解决方法(0)

如何创建polyvariadic haskell函数?

我需要一个函数,它接受任意数量的参数(所有相同的类型),对它们做一些事情然后给出一个结果.在我的具体情况下,参数列表是不切实际的.

当我查看haskell库时,我看到函数printf(来自模块Text.Printf)使用了类似的技巧.不幸的是,通过查看来源我无法理解这种魔力.

有人可以解释如何实现这一点,或至少一些网页/纸/任何我可以找到一个良好的描述吗?

动机:

我需要它的原因非常简单.对于学校(计算机科学课),我们需要编写一个能够"记录"数学表达式,将其表示为字符串的模块(通过为自己的数据类型编写Num/Real/etc的实例),并执行对它的各种操作.

此数据类型包含变量的特殊构造函数,可以由值或指定函数的任何值替换.其中一个目标是编写一个函数,它使用一些变量(类型对(Char,Rational))来表达这种表达式并计算表达式的结果.我们应该看看如何最好地表达函数的目标.(我的想法:该函数返回另一个函数,它接受与函数中定义的变量一样多的参数 - 似乎是不可能的).

haskell variadic-functions function-parameter polyvariadic

69
推荐指数
5
解决办法
1万
查看次数

Haskell函数,它将variadic函数作为参数(并返回除func之外的其他内容),而不使用FlexibleInstances,纯Haskell2010

是否可以在没有FlexibleInstances的情况下表达以下Haskell程序,即在纯Haskell2010中?

{-# LANGUAGE FlexibleInstances #-}

class    Funk a       where  truth :: a  -> [Bool]
instance Funk [Bool]  where  truth =  \x ->  x
instance Funk Bool    where  truth =  \x -> [x]

instance Funk b => Funk (Bool -> b) where
    truth f = concat [truth (f True), truth (f False)]
Run Code Online (Sandbox Code Playgroud)

这是受如何编写Haskell函数的答案的启发,该函数将可变函数作为参数.

我怀疑问题是,它truth返回的东西不是它作为参数所使用的函数(它返回Bool,而不是[Bool]).

这个片段的目的是给出一个布尔函数的所有可能配置的所有评估的列表,即

Main> truth (\x y -> x && y)
[True,False,False,False]

Main> truth (\x y -> …
Run Code Online (Sandbox Code Playgroud)

lambda haskell types variadic-functions typeclass

11
推荐指数
1
解决办法
332
查看次数