显示Haskell中的函数列表
有没有办法在Haskell中显示函数列表?当我尝试显示Haskell中的函数列表,haskell,Haskell,有没有办法在Haskell中显示函数列表?当我尝试 ghci>let函数=[(+),(-),(*)] ghci>功能 GHCi说: :17:1: 没有(Show(Num a0=>a0->a0->a0->a0))的实例 由于使用“打印”而产生的 可能的修复方法: 为(Show(Num a0=>a0->a0->a0->a0))添加实例声明 在交互式GHCi命令的stmt中:打印它 我不确定如何为此添加实例声明。任何帮助都将不胜感激。谢谢。您无法轻松显示函数。标准答案是 instance Show (
ghci>let函数=[(+),(-),(*)]
ghci>功能
GHCi说:
:17:1:
没有(Show(Num a0=>a0->a0->a0->a0))的实例
由于使用“打印”而产生的
可能的修复方法:
为(Show(Num a0=>a0->a0->a0->a0))添加实例声明
在交互式GHCi命令的stmt中:打印它
我不确定如何为此添加实例声明。任何帮助都将不胜感激。谢谢。您无法轻松显示函数。标准答案是
instance Show (a -> b) where
show _ = "<function>"
Prelude> [(+), (-), (*)]
[<function>,<function>,<function>]
最后,如果可以接受的话,我们可以使用Data.Typeable
机制为函数获得更好的摘要show
import Data.Typeable
instance (Typeable a, Typeable b) => Show (a -> b) where
show f = "{ Function :: " ++ (show $ typeOf f) ++ " }"
Prelude Data.Typeable> [(+), (-), (*)]
[ { Function :: Integer -> Integer -> Integer }
, { Function :: Integer -> Integer -> Integer }
, { Function :: Integer -> Integer -> Integer }
]
但请注意,这将在多态函数上失败
Prelude Data.Typeable> ($)
<interactive>:7:1:
No instance for (Typeable b0) arising from a use of `print'
The type variable `b0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance [overlap ok] Typeable ()
-- Defined in `Data.Typeable.Internal'
instance [overlap ok] Typeable Bool
-- Defined in `Data.Typeable.Internal'
instance [overlap ok] Typeable Char
-- Defined in `Data.Typeable.Internal'
...plus 18 others
In a stmt of an interactive GHCi command: print it
Prelude Data.Typeable> ($) :: (() -> ()) -> () -> ()
{ Function :: (() -> ()) -> () -> () }
Prelude Data.Typeable>($)
:7:1:
没有因使用“print”而产生的(可键入b0)实例
类型变量“b0”不明确
可能的修复:添加修复这些类型变量的类型签名
注意:有几个潜在的例子:
实例[重叠确定]可键入()
--在“Data.Typeable.Internal”中定义
实例[重叠确定]可键入布尔
--在“Data.Typeable.Internal”中定义
实例[overlap ok]可键入字符
--在“Data.Typeable.Internal”中定义
…再加上18个人
在交互式GHCi命令的stmt中:打印它
前奏曲数据。可键入>($)::(()->())->()->()
{函数::(()->())->()->()}
您无法轻松显示函数。标准答案是
instance Show (a -> b) where
show _ = "<function>"
Prelude> [(+), (-), (*)]
[<function>,<function>,<function>]
最后,如果可以接受的话,我们可以使用Data.Typeable
机制为函数获得更好的摘要show
import Data.Typeable
instance (Typeable a, Typeable b) => Show (a -> b) where
show f = "{ Function :: " ++ (show $ typeOf f) ++ " }"
Prelude Data.Typeable> [(+), (-), (*)]
[ { Function :: Integer -> Integer -> Integer }
, { Function :: Integer -> Integer -> Integer }
, { Function :: Integer -> Integer -> Integer }
]
但请注意,这将在多态函数上失败
Prelude Data.Typeable> ($)
<interactive>:7:1:
No instance for (Typeable b0) arising from a use of `print'
The type variable `b0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance [overlap ok] Typeable ()
-- Defined in `Data.Typeable.Internal'
instance [overlap ok] Typeable Bool
-- Defined in `Data.Typeable.Internal'
instance [overlap ok] Typeable Char
-- Defined in `Data.Typeable.Internal'
...plus 18 others
In a stmt of an interactive GHCi command: print it
Prelude Data.Typeable> ($) :: (() -> ()) -> () -> ()
{ Function :: (() -> ()) -> () -> () }
Prelude Data.Typeable>($)
:7:1:
没有因使用“print”而产生的(可键入b0)实例
类型变量“b0”不明确
可能的修复:添加修复这些类型变量的类型签名
注意:有几个潜在的例子:
实例[重叠确定]可键入()
--在“Data.Typeable.Internal”中定义
实例[重叠确定]可键入布尔
--在“Data.Typeable.Internal”中定义
实例[overlap ok]可键入字符
--在“Data.Typeable.Internal”中定义
…再加上18个人
在交互式GHCi命令的stmt中:打印它
前奏曲数据。可键入>($)::(()->())->()->()
{函数::(()->())->()->()}
查看此Haskell Wiki页面:可能重复的查看此Haskell Wiki页面:可能重复的谢谢!我有一个树,只需要知道函数在哪里,这样我就可以使用它。我将把它添加到答案中,但是为你的树创建一个特殊的显示函数,而不是提供一个全局函数实例,可能会很有价值。问题是很容易获得实例与instance…=>Show(a->b)where
@Borracha您应该通过类型知道函数的位置。类型系统防止您混合函数和非函数,而不将它们包装在某种构造函数中,从而允许您区分其参数的类型。谢谢!我有一个树,只需要知道函数在哪里,这样我就可以使用它。我将把它添加到答案中,但是为你的树创建一个特殊的显示函数,而不是提供一个全局函数实例,可能会很有价值。问题是很容易获得实例与instance…=>Show(a->b)where
@Borracha您应该通过类型知道函数的位置。类型系统阻止您混合函数和非函数,而不将它们包装在某种构造函数中,从而允许您区分其参数的类型。