作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于纯粹的好奇,我想知道在 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/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!