Haskell 隐式调用函数
我需要找到一种在Haskell中隐式调用函数的方法,就像在Scala中使用Haskell 隐式调用函数,haskell,implicit,Haskell,Implicit,我需要找到一种在Haskell中隐式调用函数的方法,就像在Scala中使用implicit函数一样 我研究过如何使用中所示的{-#LANGUAGE ImplicitParams#-},但如果不明确定义它,我就不知道如何实现类似的功能 这是我的代码的一个非常精简的版本 a :: Int -> Int a n = n + 1 b :: [Char] -> Int b cs = length cs 我想能跑 Test> a "how long" -- outputs 8, as
implicit
函数一样
我研究过如何使用中所示的{-#LANGUAGE ImplicitParams#-}
,但如果不明确定义它,我就不知道如何实现类似的功能
这是我的代码的一个非常精简的版本
a :: Int -> Int
a n = n + 1
b :: [Char] -> Int
b cs = length cs
我想能跑
Test> a "how long" -- outputs 8, as it implicitly calls a (b "how long")
以及
Test> a 5 -- outputs 6
你在这里描述的是。在哈斯克尔,这是通过
例如,我们可以定义一个类:
class Foo c where
a :: c -> Int
现在我们可以定义Foo
的两个实例:一个是Int
的实例,另一个是String
的实例:
{-# LANGUAGE FlexibleInstances #-}
instance Foo [Char] where
a = length
instance Foo Int where
a = (+) 1
我不是haskeller,但您似乎在寻找单个调度,基于参数类型的调度?您可以为Strings创建实例您可以通过定义typeclass来实现这一点,然后为
String
和Int
创建实例。是否有任何扩展方法,以便您可以忽略函数并自动转换,例如value::Int\n value=“多长时间”
它会调用length而不显式写入它吗?@w1220不,一般不会。对于String
,特别是(OverloadedStrings
扩展名)有一些东西,但我强烈建议您不要为此使用它。学习在Haskell代码中编写Haskell,而不是Scala。
Prelude> a "how long"
8
Prelude> a (5 :: Int)
6