小编Ben*_*ood的帖子

Hask或Agda有均衡器吗?

关于这是一个数学问题还是一个问题,我有点犹豫不决,但我怀疑数学家一般不太可能不太了解或关心这个类别,而Haskell程序员可能会这么做.

因此,我们知道Hask或多或少都有产品(当然,我正在使用idealized-Hask).我对它是否有均衡器感兴趣(在这种情况下它将具有所有有限的限制).

直观地看起来并不是这样,因为你不能像套装一样进行分离,因此一般来说,子对象看起来很难构建.但是对于你想要提出的任何特定情况,似乎你可以通过在Set中计算均衡器并计算它来破解它(因为毕竟,每个Haskell类型都是可数的,并且每个可数集都是同形或者是有限类型,也可以是自然类,Haskell都有.所以我看不出我是如何寻找反例的.

现在,阿格达似乎更有前途一点:那里比较容易形成子对象.显而易见的sigma类型? A (? x ? f x == g x)是均衡器吗?如果细节不起作用,它在道德上是均衡器吗?

haskell agda category-theory

36
推荐指数
2
解决办法
1424
查看次数

Lax monoidal仿函数具有不同的幺半群结构

应用函子是众所周知的,并且在Haskellers中广受欢迎,因为它们能够在有效的环境中应用函数.

在类别理论术语中,可以证明以下方法Applicative:

pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

相当于有一个Functor f操作:

unit :: f ()
(**) :: (f a, f b) -> f (a,b)
Run Code Online (Sandbox Code Playgroud)

这个想法是写pure你只是用给定的值替换()in unit,并写(<*>)你将函数和参数压缩到一个元组,然后在它上面映射一个合适的应用程序函数.

此外,这种对应关系变成了Applicative法律成左右自然monoidal十岁上下的法律unit(**),所以实际上是一个适用函子也恰恰是一类理论家称之为一个宽松monoidal仿函数(松懈,因为(**)仅仅是一个自然的转变,而不是同构).

好的,很好,很棒.这是众所周知的.但是,这只是一个家庭不严monoidal函子-那些尊重的monoidal结构产品.松散的幺正算子涉及两种幺半群结构的选择,在源头和目的地:如果你把产品变成总和,你就会得到:

class PtS f where
  unit :: f Void
  (**) :: f a -> f b -> f (Either a b) …
Run Code Online (Sandbox Code Playgroud)

haskell functor category-theory applicative

31
推荐指数
3
解决办法
1415
查看次数

Haskell/GHC UndecidableInstances - 非终止类型检查的示例?

我编写了一些需要-XUndecidableInstances来编译的Haskell代码.我确实理解为什么会发生这种情况,因为存在某种违反的条件,因此GHC会大喊大叫.

但是,我从来没有遇到类型检查器实际上挂起或在无限循环中结束的情况.

非终止实例定义是什么样的 - 你能给出一个例子吗?

haskell typechecking ghc decidable

26
推荐指数
2
解决办法
1296
查看次数

Haskell代码行没有编译:"非法数据类型上下文"

我无法在Haskell中编译这行代码,但它适用于我教授的系统.我使用ghci版本7.6.2.

data Eq a => Shape a = Shape a
Run Code Online (Sandbox Code Playgroud)

更确切地说,这是我得到的错误

[1 of 1] Compiling Main             ( test.hs, interpreted )

test.hs:1:6:
Illegal datatype context (use -XDatatypeContexts): Eq a =>
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

这里有什么错误?

谢谢

haskell compiler-errors ghci

26
推荐指数
2
解决办法
3984
查看次数

在StateT中组合多个状态

我正在编写一个作为守护进程运行的程序.要创建守护程序,用户为每个必需的类提供一组实现(其中一个是数据库)所有这些类的函数都具有表单的类型签名StateT s IO a,但s每个类都有所不同.

假设每个类都遵循以下模式:

import Control.Monad (liftM)
import Control.Monad.State (StateT(..), get)

class Hammer h where
  driveNail :: StateT h IO ()

data ClawHammer = MkClawHammer Int -- the real implementation is more complex

instance Hammer ClawHammer where
  driveNail = return () -- the real implementation is more complex

-- Plus additional classes for wrenches, screwdrivers, etc.
Run Code Online (Sandbox Code Playgroud)

现在我可以定义一条记录,表示用户为每个"槽"选择的实现.

data MultiTool h = MultiTool {
    hammer :: h
    -- Plus additional fields for wrenches, screwdrivers, etc.
  } …
Run Code Online (Sandbox Code Playgroud)

state haskell

16
推荐指数
3
解决办法
2240
查看次数

在按下按键事件后获取表单字段的值

当我在keyPress事件处理程序中检查它时,myInput.value是一个键击.因此,如果用户输入"a",myInput.value会给我"".然后,当用户键入"b"时,myInput.value会给我"a",等等.通过触发事件的击键输入的字符似乎不会更新该值.我究竟做错了什么?谢谢 - 摩根

javascript forms javascript-events

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

是否有可能将自由定理作为命题的等式?

Wadler的论文"免费定理"意义上的"自由定理" 关于某些值的等式是仅基于它们的类型导出的.所以,例如,

f : {A : Set} ? List A ? List A
Run Code Online (Sandbox Code Playgroud)

自动满足

f . map g = map g . f
Run Code Online (Sandbox Code Playgroud)

我可以接受以下类型的Agda术语:

(f : {A : Set} ? List A ? List A) {B C : Set} (g : B ? C) (xs : List B)
  ? f (map g xs) ? map g (f xs)
Run Code Online (Sandbox Code Playgroud)

或者如果是这样/如果没有,我可以做更多/更少一般的事情吗?

我知道轻量级自由定理库的存在,但我认为它没有做我想要的(或者如果它确实如此,我不能很好地理解它).

(一个示例用例是我有一个仿函数,F : Set ? Set并且想要证明多态函数F A × F B ? F (A × B)自动转换.)

agda

13
推荐指数
2
解决办法
317
查看次数

ImpredicativeTypes的简单示例

GHC用户指南参考以下示例描述了impredicative polymorphism扩展:

f :: Maybe (forall a. [a] -> [a]) -> Maybe ([Int], [Char])
f (Just g) = Just (g [3], g "hello")
f Nothing  = Nothing
Run Code Online (Sandbox Code Playgroud)

但是,当我在文件中定义此示例并尝试调用它时,我收到类型错误:

ghci> f (Just reverse)

<interactive>:8:9:
    Couldn't match expected type `forall a. [a] -> [a]'
                with actual type `[a0] -> [a0]'
    In the first argument of `Just', namely `reverse'
    In the first argument of `f', namely `(Just reverse)'
    In the expression: f (Just reverse)
ghci> f (Just id)

<interactive>:9:9:
    Couldn't match …
Run Code Online (Sandbox Code Playgroud)

haskell impredicativetypes

12
推荐指数
3
解决办法
1068
查看次数

如何使用cabal的MIN_VERSION_和其他宏与ghci?

当我MIN_VERSION_在Haskell项目中使用Cabal的各种宏时,如何在不使用cabal时确保它们都被正确定义,例如在GHCi中进行测试时?

haskell ghci cabal

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

Haskell - 在if块中调试打印

我想通过打印来调试我的程序

例如,

isPos n 
    | n<0       = False
    | otherwise = True
Run Code Online (Sandbox Code Playgroud)

我想要的东西:

isPos n 
    | n<0       = False AND print ("negative")
    | otherwise = True  AND print ("positive")
Run Code Online (Sandbox Code Playgroud)

在Haskell可以做到吗?

debugging haskell

9
推荐指数
2
解决办法
2913
查看次数