假设有一个类:
class Foo a where
g :: b -> a
f :: a -> b
我希望能够编写以下函数:
h :: a -> a
h = f . g
但要做到这一点,我需要某种方法来指定我正在使用的Foo的确切实例。有什么方法可以做到这一点,就像锈菌如何利用性状一样?我很确定每次我都可以使用模板haskell用提供的类来构建这个函数,但如果可能的话,我想了解一下。
如果希望h
在内部决定使用哪个实例,只需提供一个注释来消除歧义。比如说,如果你想选择b~Int
h :: Foo a => a -> a
h = f . (g :: Int -> a)
(我猜Foo
在您的实际类中将需要另一个参数b
,但在这种情况下,这种方法可以根据需要进行调整)。
如果您需要h
的调用者来选择实例,而不是h
本身,您可以使用AmbiguousTypes
和TypeApplication
(和ScopedType变量
)。
h :: forall b a . Foo a => a -> a
h = f . (g :: b -> a)
稍后,您可以像中一样调用h
,例如,h@Int
以选择b~Int
。
我想出了这两个: 我的例子正确地说明了这个练习吗? 给定两个参数: null null 我在SO上看到了一些类似的问题(比如,这个问题),这个问题几乎是我要找的,但不完全是(我只是在找函数的例子,没有别的--没有应用性,没有单子)。
函数在Haskell中起主要作用,因为Haskell是一种函数式编程语言。与其他语言一样,Haskell确实具有自己的函数定义和声明。 函数声明由函数名称,其参数列表以及其输出组成。函数定义是实际定义函数的地方。让我们看看一个添加函数的示例,以详细了解此概念。 在这里,在第一行中声明了函数,在第二行中,我们编写了实际的函数,该函数将带有两个参数并产生一个整数类型的输出。 与大多数其他语言一样,Ha
我目前正在学习SwiftUI,想开发自己的应用程序。我设计了一个和一个,它们应该处理登录背后的所有逻辑。当用户输入错误的用户名/密码时,屏幕上应该会出现一个警报。我用状态变量解决了这个问题。但现在出现了棘手的部分,因为我想将这个变量的绑定传递给中的登录函数。看一下下面的代码: 我现在正在尝试更改登录函数中的错误值: 但我发现了错误 无法赋值:“error”是“let”常量 我认为这是有意义的,因为
我在看H.J.Lu的补丁:更新x86 rdrand intrinsics。我不知道我是否应该使用rdrand\u64、rdrand64\u步骤,或者是否有其他功能。似乎没有为他们编写测试用例。 似乎也缺乏手册页(来自Ubuntu 14,GCC 4.8.4): 如何使用RDRAND内部函数来生成一个32字节的块? 一个相关的问题是RDRAND和RDSEED内部函数GCC和Intel C。但它没有告诉
问题内容: 我刚刚开始自学Python,此脚本需要一些帮助: 我想得到它。 问题答案: 你快到了。您正在尝试修改全局变量,因此必须添加以下语句: 如果运行以下版本,则会看到您的版本中发生了什么: 输出: 运行它的方法,最终尝试在中修改函数的局部变量,这基本上是未定义的行为。请参阅文档中的警告: 注意: 默认 本地语言的 行为如以下功能所述:不应尝试对默认 本地 字典进行修改。如果需要在函数返回后查
问题内容: 尝试在自己的函数中使用名称空间时出现解析错误 问题答案: 从导入的作用域规则 use关键字必须在文件的最外部作用域(全局作用域)中或在名称空间声明中进行声明。这是因为导入是在编译时而不是在运行时完成的,因此无法进行块作用域 因此,您应该这样放置,使用应该在全局级别上指定
严格说来,Ruby中没有函数.但Kernel模块中定义的方法(可以在任何地方用做函数,因此)可被其他语言当做函数来调用.若您对这些方法进行再定义时,就必需考虑到对其他方面的影响. `str 把字符串str当做外部命令来运行,并以字符串方式返回命令的输出.使用`str`形式来调用该方法(还可以使用%x(...)表示法进行调用.请参考命令输出). 可以使用$?来了解命令的结束状态. 若您只想执行命令,
问题内容: 我有一些代码,其结构类似于此 问题是它向我吐了一个错误。 解析错误:语法错误,意外的T_LNUMBER,预期的T_VARIABLE或’$’ 有关于如何在bbcode函数的preg_replace内调用embed_video的想法吗? 谢谢! 问题答案: 您可以在上使用“ e”修饰符(请参见模式修饰符) 告诉将第二个参数视为PHP代码。