小编Thr*_*eFx的帖子

为什么权力集在haskell中被认为是非确定性的例子?

给定一组[1,2,3],功率集是唯一的.为什么我们说这是非确定性的?考虑另一个例子

[1,2] >>= \n -> ['a','b'] >>= \ch -> return (n,ch)  
Run Code Online (Sandbox Code Playgroud)

为什么这个函数不确定?

如果我认为\ch -> return (n,ch)第二个功能是第一个?

如果第一个功能是

\n -> ['a','b'] >>= \ch -> return (n,ch)  
Run Code Online (Sandbox Code Playgroud)

为什么从右到左进行评估.

不应该\n -> (function)吗?

这是什么功能(['a','b'] >>= \ch -> return (n,ch))

如果它从左到右它不能在\ch不使用第一部分的情况下评估第二部分['a','b'],而第一部分不需要对'n'参数做任何事情.

haskell

3
推荐指数
1
解决办法
165
查看次数

GHC 泛化加法时的重叠实例

试图推广(+)到不仅仅是Nums,我写了一个Addable类:

{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances #-}

class Addable a where
  (+) :: Addable a => a -> a -> a

instance Addable [a] where
  (+) = (++)

instance Num a => Addable a where
  (+) = (Prelude.+)
Run Code Online (Sandbox Code Playgroud)

在尝试添加(连接)列表时,GHC 会抱怨重叠实例:

*Test> "abc" + "defghi"

<interactive>:84:7:
    Overlapping instances for Addable [Char] arising from a use of `+'
    Matching instances:
      instance Num a => Addable a -- Defined at Utils.hs:23:10
      instance Addable [a] -- Defined at …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass overlapping-instances

3
推荐指数
1
解决办法
703
查看次数

自动派生GADT的show实例

假设我有一个复杂的GADT,它有许多隐藏的类型参数作为构造函数:

data T where
  A :: Num n => n -> T
  B :: (Num n, Integral m) => n -> m -> T
  C :: Floating a => [a] -> T
  -- and so on
  Z :: Num n => n -> n -> T
Run Code Online (Sandbox Code Playgroud)

我想让这个数据类型显示而不必手动编写实例.问题是,因为Show不再是超类Num,所以添加一个简单deriving instance Show T对于编译器来说不足以推断它必须Show为所有内部隐藏类型参数添加约束.

对于每个隐藏类型参数,它输出类似的东西

Could not deduce (Show n) arising from a use of 'showsPrec'
from the context Num n
  bound by a pattern with …
Run Code Online (Sandbox Code Playgroud)

haskell gadt deriving

2
推荐指数
1
解决办法
987
查看次数

goto和come来一样强大吗?

我只是想知道讨厌的goto陈述是否和陈述一样强大comefrom?在我看来,他们的能力可能相等,但我并不完全确定.是否有任何形式证明它们同样强大(或不同等强大)?


对于任何从未听说过的人:comefrom有点颠倒过来goto:

    comefrom doom;
    WriteLine("I will never stop executing!");
doom:
Run Code Online (Sandbox Code Playgroud)

language-agnostic goto comefrom

1
推荐指数
1
解决办法
192
查看次数

如何在 AmCharts 的值轴中设置连续整数步长?

我想设置一个连续整数步骤,即0,1,2,3,4,.......我的图表中 valueAxis。我怎样才能做到这一点?

javascript charts amcharts

1
推荐指数
1
解决办法
2638
查看次数

允许未标记的联合等同于允许类型类?

这个问题中,未标记的联合被描述为一种子类型.

类型类也是子类型的一种形式.

它们在概念上是等同的吗?他们是,我将如何在Haskell中实现这些?

haskell type-theory subtyping

1
推荐指数
1
解决办法
250
查看次数

monad变换器堆栈中的evalState

给定mtlmonad堆栈,例如ExceptT String (WriterT String (State s a)),如何评估内部状态monad而无需打开外部monad?

have :: ExceptT String (WriterT String (State s)) a
f    :: State s a -> a

want :: ExceptT String (WriterT String Identity) a
Run Code Online (Sandbox Code Playgroud)

我可以通过调用runExceptT后跟runWriterT并重新打包结果来实现这一点,但这似乎是完成此任务的错误方法.


就我所尝试而言,类似fmap或类似的东西将无法工作,因为monad变换器堆栈被视为一个完整的monad.我需要的是一个"拆分"monad变换器堆栈的功能,如下所示:

split :: (MonadTrans s, Monad t) => (s t) a -> s (t a)
Run Code Online (Sandbox Code Playgroud)

要么我没有找到这个功能,要么解决方案完全不同.

haskell state-monad monad-transformers

1
推荐指数
1
解决办法
135
查看次数