显示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 (

有没有办法在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 (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您应该通过类型知道函数的位置。类型系统阻止您混合函数和非函数,而不将它们包装在某种构造函数中,从而允许您区分其参数的类型。