相关疑难解决方法(0)

Haskell:<*>如何发音?

你如何在Applicative类型类中发音这些函数:

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

(也就是说,如果他们不是运营商,他们会被称为什么?)

作为旁注,如果你可以重命名pure为对非数学家更友好的东西,你会怎么称呼它?

haskell operators

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

scalaz运算符的可发音名称?

在学习Haskell时,我发现这个问题的答案非常有用,因为它将概念与运算符联系起来:常见的Haskell运算符是否有明显的名称?

scalaz有一个等价的字典吗?或者有人可以帮助提供有关他们如何发音自己的scalaz代码的建议?

functional-programming scala scalaz

24
推荐指数
3
解决办法
4220
查看次数

用于学习惯用的Haskell(eta约简,符号中缀运算符,库等)的资源

尽管有一些Lisp和ML的经验,但我在学习阅读和(惯用)编写Haskell时遇到了很多麻烦,因为本地风格似乎是

  • 尽可能做到消除
  • 避免使用括号来支持运算符优先级
  • 将一半的逻辑打包到超载的非字母数字中缀运算符的桶中

最后一个特别困难,因为有很多预定义的运算符,每个运算符都有自己的约定和一般语义,经常阅读Haskell成为Hoogle和:type.

是否有任何好的教程假设CS /功能概念的知识,而是专注于Haskell特定的习语?我正在寻找类似Real-World Haskell的东西,它以一个非常幼稚,明确的程序开始,然后逐渐将其转换为更惯用的风格,介绍和解释成语.但是它不是引入和解释像monad和类类这样的一般概念,而是引入特定的monad和特定的类型类,比如"但这正是Alternative monoid所做的!"

haskell idioms

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

什么是更好的方法来写[(-1,-1),( - 1,0),( - 1,1),(0,-1),(0,1),(1,-1), Haskell中的(1,0),(1,1)]?

我遇到了一些我需要列表的情况:

[(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)] -- no (0,0)
Run Code Online (Sandbox Code Playgroud)

请注意,列表中没有(0,0).我使用(dx,dy)元组从坐标向上,向下,向左,向右和对角搜索.

每次我写它时,我觉得应该有一个更简洁,和/或更容易阅读的方式来定义它.我对Haskell比较陌生,而且我认为在Applicative/Functor/Monad技巧的某个地方应该有一个巧妙的方法来做到这一点.

我试过了:

[(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]
Run Code Online (Sandbox Code Playgroud)

有时最好把它写出来,但我认为这不是其中之一.一目了然(0,0)不包括在内并且你必须阅读它以注意模式.

map (\[a,b] -> (a,b)) $ delete [0,0] $ sequence $ replicate 2 [-1,0,1]
Run Code Online (Sandbox Code Playgroud)

我喜欢上面的那个,因为我把"2"放在那里,这是一个很好的明确方式来说"我们两次做同样的事情",但我不能接受前面的地图与大不安全的lambda和2个名字.

[(dx,dy) | let a = [-1,0,1], dx <- a, dy <- a, (dx,dy) /= (0, 0)]
Run Code Online (Sandbox Code Playgroud)

这个名称中包含太多名称,但完全按照设计使用列表推导.对于那些真正喜欢列表推导的人来说,可能更容易阅读,但我不喜欢所有的名字.

let x = [-1,0,1] in delete (0,0) $ (,) <$> x <*> x
Run Code Online (Sandbox Code Playgroud)

那个看起来更漂亮的imo,但我没有那个"2",我有一个名字.到目前为止,这是我的最爱,但它并不完美.

我想如果我理解如何更好地写这个,我可能会更深入地了解Functors/Monads等.我已经读了很多关于它们的内容,我听过很多像fmap/mconcat/etc这样的词,但我不知道在这种情况下要抓哪一个.

haskell list-comprehension applicative

16
推荐指数
4
解决办法
1004
查看次数

适用(和朋友)方法是否有人性化的名称?

我最近一直在使用应用程序(和替代方案),令我感到沮丧的一件事是我缺乏对命名法的了解.作为一个例子,我希望能说function name的,而不是star thing<*>.因此,与>>=读取的方式大致相同bind,以下是否有更多人性化的名称:

  • <*> - 申请?
  • <*&*>- 左右适用?
  • <$> - fmap?
  • <|>

同样来自箭头

  • *** - 分裂?
  • &&& - 扇出?

如果有这些名称,我的搜索没有发现它们.我知道这些可能没有被接受的条款,但如果有,我很想知道它们.

haskell naming applicative

9
推荐指数
3
解决办法
510
查看次数

Haskell monads:`(>> =)`和`(= <<)`的名称是什么?

我已经和Haskell一起玩了好几年了; 我对monad如何工作,如何使用它们以及操作员(=<<)(>>=)做什么感到很满意.

但我还是不知道如何谈论它们!对于他们的工作是否有任何标准术语 - 将箭头a -> m b转换为箭头的动作m a -> m b

(作为背景的数学家,脑海中浮现的一个选项是"来自Kleisli类别的遗忘函子".但是Haskell大师肯定会有一些更简洁的术语,因为在Haskell中,这个操作被用作其中一个构建块. monads,与通常被认为是派生操作的数学设置不同,从乘法和functoriality定义!)

monads haskell

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

<$ in in Maybe定义

Prelude> (fmap . const ) 2 Just 3
2
Prelude> 2 <$ Just 3
Just 2
Prelude> :t (<$)
(<$) :: Functor f => a -> f b -> f a
Prelude> :t fmap . const
fmap . const :: Functor f => b -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

在仿函数中,

(<$)        =  fmap . const   
Run Code Online (Sandbox Code Playgroud)

为什么我为Maybe得到不同的结果?没找到<$在Maybe中的工具.谢谢.

haskell

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

How do you say <$>和<*> in English

可能重复:
常见的Haskell运算符是否有明显的名称?

你怎么说<$><*>英语.我明白这<$>只是fmap,所以它被称为?

你会如何大声朗读这些片段?

ghci> (:) <$>  Just 3 <*> Just [4]

ghci> Just (+3) <*> Just 9  
Run Code Online (Sandbox Code Playgroud)

haskell applicative

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

Haskell函数重写没有绑定返回

根据我在这里收到的建议,我试图在没有无关的绑定分配的情况下重写函数并返回,但是我遇到了额外的IO,我似乎无法理解如何摆脱它.

我有

good :: IO (Either Int String)

getit :: Either Int String -> Int

main :: IO ()
main = do
  x <- fmap getit good
  putStrLn $ show x
Run Code Online (Sandbox Code Playgroud)

主要工作正常.但....

main2 :: IO ()
main2 = do
  putStrLn $ show $ fmap getit good

-- let's try totally without do
main3 :: IO ()
main3 = putStrLn $ fmap show $ fmap getit good
Run Code Online (Sandbox Code Playgroud)

main2失败了:

• No instance for (Show (IO Int)) arising from a use …
Run Code Online (Sandbox Code Playgroud)

haskell pointfree

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