作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白为什么 Demonbind1 的定义会产生一些编译器错误。它看起来像一个愚蠢的翻转,但不知何故..
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes, ScopedTypeVariables, TypeOperators, TypeFamilies,ImpredicativeTypes #-}
type a :-> b = forall i . a i -> b i
class IFunctor f where imap :: (a :-> b) -> (f a :-> f b)
class (IFunctor m) => IMonad m where
skip :: a :-> m a
bind :: (a :-> m b) -> (m a :-> m b)
-- Conor McBride's "demonic bind"
(?>=) :: forall m a b i. (IFunctor m, IMonad m) => m a i -> (a :-> m b) -> m b i
(?>=) =
let
-- OK
demonbind0 = flip (bind :: forall i. (forall j. a j -> m b j) -> m a i -> m b i )
-- KO - see error below
demonbind1 = flip bind :: forall i. m a i -> (forall j. a j -> m b j) -> m b i
-- So i have to write this
demonbind2 :: forall i. (m a i -> (a :-> m b) -> m b i )
demonbind2 mai ti = (bind ti) mai
in demonbind2
Couldn't match type ‘a j0 -> m b j0’ …
with ‘forall i2. a i2 -> m b i2’
Expected type: (a j0 -> m b j0) -> m a i1 -> m b i1
Actual type: a :-> m b -> m a i1 -> m b i1
In the first argument of ‘flip’, namely ‘bind’
In the expression:
flip bind :: forall i. m a i -> (forall j. a j -> m b j) -> m b i
最佳答案
有点意外,ImpredicativeTypes
在 GHC 8.0 的开发快照上似乎没有平常那么糟糕!这编译没有错误:
(?>=) :: (IFunctor m, IMonad m) => m a i -> (a :-> m b) -> m b i
(?>=) = flip bind
关于haskell - 排名多态性和离谱财富的 kleisli 箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488322/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!