出于纯粹的好奇,我想知道 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)
Run Code Online (Sandbox Code Playgroud)
我想知道它是否可以实现,如果没有像 typeclasses 这样的助手,你是否可以做到。
这可能非常简单,但我找不到关于我的问题的任何文档。
在 Scala 中有两种定义函数的方法,一种def
是使用 theval
关键字,另一种是使用关键字。作为函数式编程的高手,我更喜欢使用后者。
现在我有一个问题:写一个def
带有多态类型参数的函数是没有问题的:
def function[T](n: T) = {print(n)} // syntactically fine
Run Code Online (Sandbox Code Playgroud)
但是,如何使用val
关键字做同样的事情仍然让我感到困惑。这种天真的方法在语法上是无效的:
val function[T]: (a: T) => print(a) // Doesn't compile
Run Code Online (Sandbox Code Playgroud)
也就是说,我绝对有可能在这里误解了 Scala 在多态性和泛型方面的方法。