我需要找到一种在Haskell中隐式调用函数的方法,类似于implicit在Scala中使用函数的方法。
我已经研究了使用隐式参数和函数中{-# LANGUAGE ImplicitParams #-}所示的方法,但是如果不明确定义它,我将无法弄清楚如何实现类似的效果。
这是我的代码的简化版本
a :: Int -> Int
a n = n + 1
b :: [Char] -> Int
b cs = length cs
Run Code Online (Sandbox Code Playgroud)
我希望能够跑步
Test> a "how long" -- outputs 8, as it implicitly calls a (b "how long")
Run Code Online (Sandbox Code Playgroud)
以及
Test> a 5 -- outputs 6
Run Code Online (Sandbox Code Playgroud)
您在这里描述的是即席多态 [wiki]。在Haskell中,可以通过类型类 [wiki]实现。
例如,我们可以定义一个类:
class Foo c where
a :: c -> IntRun Code Online (Sandbox Code Playgroud)
现在,我们可以定义的两个实例Foo:的实例Int和的实例String:
{-# LANGUAGE FlexibleInstances #-}
instance Foo [Char] where
a = length
instance Foo Int where
a = (+) 1Run Code Online (Sandbox Code Playgroud)
接下来,我们可以调用a:
Prelude> a "how long"
8
Prelude> a (5 :: Int)
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |