小编har*_*arr的帖子

Histomorphisms,Zygomorphisms和Futumorphisms专门列出

我最终搞清楚了.请参阅我给出的演讲的视频和幻灯片:

原始问题:

在我努力理解通用递归方案(即使用Fix)时,我发现编写各种方案的仅列表版本很有用.它使得理解实际方案变得更加容易(没有额外的开销Fix).

但是,我还没有想出如何定义只列出版本zygofutu.

以下是我目前的专门定义:

cataL :: (a ->        b -> b) -> b -> [a] -> b
cataL f b (a : as) = f a    (cataL f b as)
cataL _ b []       = b

paraL :: (a -> [a] -> b -> b) -> b -> [a] -> b
paraL f b (a : as) = f a as (paraL f b as)
paraL _ b …
Run Code Online (Sandbox Code Playgroud)

recursion haskell recursion-schemes

38
推荐指数
3
解决办法
6139
查看次数

Haskell:如何告诉hlint不要:`警告:使用字符串文字`

我有一个单元测试文件:

module X04PatMatTest where

import AssertError
import Test.HUnit
import X04PatMat

...
Run Code Online (Sandbox Code Playgroud)

和hlint抱怨:

X04PatMatTest.hs:15:69: Warning: Use string literal 
Found:
  ['a', 'b', 'd']
Why not:
  "abd"
Run Code Online (Sandbox Code Playgroud)

由于各种原因,我真的想要['a', 'b', 'd']输入测试代码.

我尝试了各种各样的permuatations

{-# ANN X04PatMatTest "HLint: ignore Warning: Use string literal" #-}
Run Code Online (Sandbox Code Playgroud)

比如将pragma作为文件的第一行,在模块声明之后,用名称module代替X04...,将... 更改Warningwarn...

什么是魔术?

haskell hlint

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

Haskell:如何将接口与实现分开

我知道有两种方法可以将接口规范与Haskell中该接口的实现分开:

  1. 类型类,例如:

  2. 记录,例如:

问题1:什么时候适合使用其中一种?

问题2:在Haskell中分离接口/ impl有哪些其他方法?

polymorphism haskell interface typeclass

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

在Haskell中使用什么而不是显式递归?

编写一个函数,将右边第二个数字开头的其他数字加倍:

例:

doubleEveryOther   [8,7,6,5]
=> [16,7,12,5]

doubleEveryOther     [1,2,3]
=> [1,4,3]
Run Code Online (Sandbox Code Playgroud)

O(n)解决方案:

doubleEveryOther :: Num a => [a] -> [a]
doubleEveryOther xs0 =
    let (_,r)   = deo xs0
        deo xs1 = case xs1 of
            []     -> (False, [])
            (x:xs) -> let (b, xs') = deo xs in ((not b), (if b then 2*x else x) : xs')
    in r
Run Code Online (Sandbox Code Playgroud)

以上对显式递归的使用通常被认为是差的Haskell样式(例如,在可能的情况下使用fold*,scan等).

质询

  1. Haskell库函数涵盖了上述情况?

  2. 什么是更简洁/惯用的Haskell解决方案仍然是O(n)?

  3. 是否有上述类型的递归的名称(我们使用更深层递归的值来做出下一级别的决定)?

recursion haskell

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

Haskell:如何为类型Set = Int - > Bool定义实例Show Set

我正在练习Martin Odersky的Scala和Haskell的"Scala中的功能编程原理"课程.对于"设置为函数"练习,我定义了一个"toString"函数:

import Data.List (intercalate)

type Set = Int -> Bool

contains :: Set -> Int -> Bool
contains s elem = s elem

bound = 1000

toString :: Set -> String
toString s =
    let xs = [(show x) | x <- [(-bound) .. bound], contains s x]
    in "{" ++ (intercalate "," xs) ++ "}"

-- toString (\x -> x > -3 && x < 10)
-- => "{-2,-1,0,1,2,3,4,5,6,7,8,9}"
Run Code Online (Sandbox Code Playgroud)

能够定义:很高兴:

instance Show Set where
    show Set = ... …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

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

Haskell任务的Makefile示例

而不是发明我自己的,对于典型的Haskell任务,例如编译,打包,hlint,quickcheck等,有什么好的makefile规则?

在搜索中我发现像这样的例子:

ghc -M *.hs
Run Code Online (Sandbox Code Playgroud)

haskell makefile quickcheck cabal hlint

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

Haskell中作家Monad的'bind'和'return'的官方定义在哪里?

到目前为止,我发现:

http://monads.haskell.cz/html/writermonad.html
http://en.wikipedia.org/wiki/Monad_(functional_programming)
Run Code Online (Sandbox Code Playgroud)

给出了>>=和的定义return

官方代码在哪里?

monads haskell writer-monad

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