gpt4 book ai didi

function - Haskell 中的打印功能如何像 python 或 Scala 一样?

转载 作者:行者123 更新时间:2023-12-01 07:11:09 25 4
gpt4 key购买 nike

我尝试在 Haskell 中打印函数只是为了好玩,就像这个例子:

{-# LANGUAGE FlexibleInstances #-}

instance Show (Int -> Bool) where
show _ = "function: Int -> Bool"

在 GHCi 中加载并运行和示例:
λ> :l foo
[1 of 1] Compiling Main ( foo.hs, interpreted )

foo.hs:2:1: Warning: Unrecognised pragma
Ok, modules loaded: Main.
λ> (==2) :: Int -> Bool
function: Int -> Bool

但是,我希望看到每个函数在调用时都打印自己。

最佳答案

您不能将它用于一般函数,因为类型信息仅在编译时出现,但您可以使用 Typeable如果类型是 Typeable 的实例,则用于编写足够接近的内容的类类(class)。

import Data.Typeable

instance (Typeable a, Typeable b) => Show (a -> b) where
show f = "Function: " ++ (show $ typeOf f)

在 ghci 中测试这个
*Main> (+)
Function: Integer -> Integer -> Integer
*Main> (+10)
Function: Integer -> Integer

但这不适用于一般函数,除非类型被限制为具有 Typeable 的类型。实例。
*Main> zip

<interactive>:3:1:
Ambiguous type variable `a0' in the constraint:
(Typeable a0) arising from a use of `print'
Probable fix: add a type signature that fixes these type variable(s)
In a stmt of an interactive GHCi command: print it

<interactive>:3:1:
Ambiguous type variable `b0' in the constraint:
(Typeable b0) arising from a use of `print'
Probable fix: add a type signature that fixes these type variable(s)
In a stmt of an interactive GHCi command: print it
*Main> zip :: [Int] -> [Bool] -> [(Int,Bool)]
Function: [Int] -> [Bool] -> [(Int,Bool)]

关于function - Haskell 中的打印功能如何像 python 或 Scala 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com