小编dfe*_*uer的帖子

monad是什么类型的数据结构?

我对monad是什么(一个为有用的计算构建提供上下文的参数化类型),为什么它存在(所以你可以做需要上下文的事情,比如IO),如何使用它(bind返回)变量与>>=),并且非常粗略地理解它在类别理论中的适用范围(保证函数上下文同质性的类别)**.

然而,就基础数据结构而言,monad是什么?因为它与一个applicative functor(看起来像一个列表)有关,我的猜测是GHC获取monad的内容并将它们放入某种链接列表中,并在整个计算过程中传递它们.

引擎盖下真的发生了什么?

**如果您了解更多,请随时纠正这些问题.

monads haskell compilation functor data-structures

3
推荐指数
2
解决办法
387
查看次数

什么是修复点?

最近留下匿名的海报试图实现这样的阶乘函数:

f :: Int -> Int
f = fix f
Run Code Online (Sandbox Code Playgroud)

这显然不是很好.但后来我想知道:我能通过类型检查器吗?它的类型将揭示什么?

recursion haskell fixpoint-combinators

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

复制的定义不足

我有一个问题,我认为相当棘手.

标准前奏包含该功能

replicate :: Int -> a -> [a]
Run Code Online (Sandbox Code Playgroud)

以下看起来似乎是一个合理的定义

replicate n x = take n [x,x,..]
Run Code Online (Sandbox Code Playgroud)

但实际上这还不够.为什么不?

我知道该replicate函数定义为:

replicate        :: Int -> a -> [a]       
replicate n x    =  take n (repeat x)
Run Code Online (Sandbox Code Playgroud)

repeat定义为:

repeat           :: a -> [a]  
repeat x         =  xs where xs = x:xs
Run Code Online (Sandbox Code Playgroud)

定义是否不充分(来自问题),因为它使用无限列表?

haskell

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

GAE无国籍吗?有什么影响?

我曾被告知GAE是无国籍的.我一般都理解无状态的概念,但我可以在概念上将它应用于GAE类型系统.

我特意问这个问题,因为我开发的应用程序似乎存在干扰问题.也就是说,当两个或更多人同时使用它时,它会变得混乱.(我继续进行bug测试以确认错误仅在同时使用期间发生.)我认为理论上可能存在这样的干扰的两种方式:A,错误的GQL查询获取错误的db记录(我检查了这个,nope); 或b.在服务器级别.我的问题:后者究竟有可能吗?当应用程序正在服务时,一个用户是否可以通过改变程序中变量的状态来干扰另一个用户?或者,也许,无国籍状态会阻止这种情况吗?我很困惑,可能错误地提出了这个问题.合十礼.

google-app-engine stateless

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

Netbeans更新失败

我的互联网连接没有问题。但是,当我尝试更新netbeans插件或IDE本身时,每次都会得到此屏幕。

名为“ NetBeans IDE安装程序”的窗口。 上部文本:“欢迎使用NetBeans IDE插件安装程序。安装程序将下载,验证然后安装选定的插件。”  下部文本:“检查更新失败。检查您的网络连接,确认在NetBeans IDE中正确配置了代理设置,或稍后重试。”

即使重新安装操作系统也无法解决此问题。一次又一次地得到相同的错误。我该如何解决?

windows netbeans netbeans-7

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

求解方程a*b = c,其中a,b和c是自然数

我有一些自然数c.我想找到所有对自然数a and b,其中a < b,如a * b = c.

我有一个解决方案:

solve c = do solveHelper [1..c] c where
                   solveHelper xs c = do
                       x <- xs
                       (division, modulo ) <- return (c `divMod` x)
                       True <- return (modulo  == 0)
                       True <- return (x <= division)
                       return (x, division)
Run Code Online (Sandbox Code Playgroud)

例:

*Main> solve 10
[(1,10),(2,5)]
Run Code Online (Sandbox Code Playgroud)

有没有办法加速我的代码,或者我应该使用更好的算法?

haskell equation brute-force

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

异常类型错误

我正在学习Haskell中的异常如何工作.
当试图在Prelude中复制这个简单的例子时,我得到:

GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Prelude> :m Control.Exception
Prelude Control.Exception> let x = 5 `div` 0
Prelude Control.Exception> let y = 5 `div` 1
Prelude Control.Exception> print x
*** Exception: divide by zero
Prelude Control.Exception> print y
5
Prelude Control.Exception> try (print x)

<interactive>:16:1:
    No instance for (Show (IO (Either e0 ())))
      arising from a use of `print'
    In a stmt of an interactive GHCi command: print it
Prelude Control.Exception>
Run Code Online (Sandbox Code Playgroud)

为什么我得到任何情况下错误try(print …

haskell

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

Haskell ...解析模块上的错误

这可能有什么问题?我已经尝试了多种解决方案,但最终都会出现'模块'上的错误以及主要后面的=符号.有没有搞错?!?!?!

printTabuleiro :: [[Char]] -> IO()
printTabuleiro [] = []
printTabuleiro (l :lt) = putStr l : printTabuleiro lt

module Main where

main = let 
          a = ["#####\n","###o##\n"] 
       in do printTabuleiro a
Run Code Online (Sandbox Code Playgroud)

现在我得到了这个编译错误,我不明白这里的类型匹配问题.顺便说一句,我是相当新的,不习惯功能,请不要把我加入火星.

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

visualisacao.hs:14:27:
    Couldn't match expected type ‘IO ()’ with actual type ‘[IO ()]’
    In the expression: putStr l : printTabuleiro lt
    In an equation for ‘printTabuleiro’:
        printTabuleiro (l : lt) = putStr l : printTabuleiro lt

visualisacao.hs:14:38:
    Couldn't match …
Run Code Online (Sandbox Code Playgroud)

haskell program-entry-point module

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

Haskell fmap 组合误区

如果我组合两个fmaps

Prelude> :t (fmap.fmap)
(fmap.fmap)
  :: (Functor f, Functor f1) => (a -> b) -> f1 (f a) -> f1 (f b)
Run Code Online (Sandbox Code Playgroud)

我得到一个函数,该函数将函数应用于 2 个嵌套结构级别内的值,f1并且f.

我可以使用它——这按我的预期工作:

Prelude> (fmap.fmap) (+1) [[1,2]]
[[2,3]]
Run Code Online (Sandbox Code Playgroud)

与我预期的推断类型(结果周围的 2 级结构)

Prelude> :t  (fmap.fmap) (+1) [[1,2]]
(fmap.fmap) (+1) [[1,2]] :: Num b => [[b]]
Run Code Online (Sandbox Code Playgroud)

以下不起作用。我也期待这个(因为我们不能申请sum一个数字):

Prelude>  (fmap.fmap) sum [[1,2]]

<interactive>:39:2: error:
    • Could not deduce (Num (t0 b))
      from the context: (Num (t b), Num b, Foldable t)
        bound …
Run Code Online (Sandbox Code Playgroud)

haskell

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

为什么操作数的顺序会影响范围?

我试图理解为什么某个构造函数在一个表达式中被接受,但在另一个表达式中不被接受。我本以为它超出了两者的范围。我是 OCaml 的初学者(我主要使用 Haskell),所以我可能会错过一些对于有经验的人来说完全明显的东西。

type zero = Zero
type 'n succ = Succ
type 'n snat =
  | SZero : zero snat
  | SSucc : 'm snat -> 'm succ snat

module SimpleInduction (Pred : sig type 'n pred end) = struct
  open Pred
  type hyps =
    { base : zero pred
    ; step : 'm. 'm pred -> 'm succ pred}

  let rec induct : type n. hyps -> n snat -> n pred =
          fun h sn -> …
Run Code Online (Sandbox Code Playgroud)

ocaml module

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