gpt4 book ai didi

haskell - 具有多种参数类型的多态输入函数

转载 作者:行者123 更新时间:2023-12-03 18:05:08 25 4
gpt4 key购买 nike

出于纯粹的好奇,我想知道在 Haskell 中可能会出现以下情况:
一个函数foo将另一个函数作为参数,在 foo 的主体中调用不止一次,沿途更改参数的类型。
以下代码无法编译,因为 fn的参数的类型一旦被调用就会被固定下来,但希望它能够说明我在胡说八道。

main = putStrLn (foo id)

foo :: (* -> *) -> [Char] -- maybe I'm also getting the whole *-thing wrong
foo fn =
let
val1 = fn "hey"
val2 = fn 42
in
show (val1, val2)
我想知道它是否可以实现,如果没有像类型类这样的帮助器,你是否可以做到。

最佳答案

您正在寻找的是 extension called RankNTypes .有了它,您可以将函数的类型编写为:

{-# LANGUAGE RankNTypes #-}

foo :: (forall a. a -> a) -> [Char]
在这种情况下,您可以提供的唯一功能是 id ,但您也可以使用类型类来允许更有趣的多态函数作为参数。考虑这个版本的函数:
bar:: (forall a. Show a => a -> String) -> String
bar fn =
let
val1 = fn "hey"
val2 = fn 42
in
val1 <> val2

关于haskell - 具有多种参数类型的多态输入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66370965/

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