小编lef*_*out的帖子

如何在haskell中的函数参数中传递列表?

我知道这个问题以前已被问过很多次了,我已经仔细阅读了它们,但这并没有帮助我回答我的问题类型.我对Haskell很新,

让我们假设我们有以下内容:

filter p [] = []
filter p (h:l) = if (p h) then (h:(filter p l)) else (filter p l)
Run Code Online (Sandbox Code Playgroud)

我有两个问题

  1. 我怎么称呼过滤器?我所知道的是你传递的p是一个列表

  2. 老实说,我一般都不知道什么是多态类型,我无法弄清楚多态类型的过滤函数.

我没有事件了解函数过滤器在if语句中的作用.

如果你能帮我解决这两个问题,我将非常感激.

有很多资源可以解释多态性,但我不理解它们.

polymorphism haskell function list

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

将IO操作结果存储在LET子句中

你好有人可以解释一下let block如果你知道你将从那时起使用它(你需要像头一样的结果),你如何在haskell中存储一个动作的结果?

在我的情况下,我调用了两次listDirectory,我想在变量中保存第一个调用的值,initialList以便稍后将其长度与稍后的调用进行比较listDirectory.

如何listDirectory在我的变量中存储第一个调用initialList

module Main where 

import System.IO
import System.Directory
import DB(db)
import Company

main::IO()
main = do
    putStrLn "Insert folder for output:"
    folder<-getLine
    makeDir folder>>= \b -> 
        putStrLn (if b then "Created" else "Existed Already")

makeDir::String->IO  Bool
makeDir dirname=let root="D:\\"
                    enumerateDirs=listDirectory root
                    initialList=<<enumerateDirs in  //how can i store it here?

     if  dirname `elem` initialList then
        putStrLn "Directory found , folder count:"++length initialList
     else  
        createDirectory root++dirname>>
        length …
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何在 Haskell 中组合多态函数?

我有以下文件:

module SimpleComposition where

class Domain a where
    f :: a -> a
    g :: a -> a

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

尝试在 ghci 中加载它时,出现错误

src\play.hs:7:5: error:
    * No instance for (Domain c0) arising from a use of `f'
    * In the first argument of `(.)', namely `f'
      In the expression: f . g
      In an equation for `h': h = f . g
Run Code Online (Sandbox Code Playgroud)

我认为问题在于fand的类型gisforall a. Domain a => a ->a而不仅仅是a -> …

polymorphism haskell composition

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

处理“BOX”的 Haskell 函子实现?

在范畴论中,函子的概念如下:

https://ncatlab.org/nlab/show/functor

在此处输入图片说明

在 Haskell 中,Functor类型可以表示为:

fmap :: (a -> b) -> f a -> f b

https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Functor.html

我可以看到两者真的很好地对应。

然而,一旦我们真正尝试将这个 Functor 概念实现到代码中,似乎就不可能定义Ffmap像上图所示那样简单。

事实上,有一篇关于 Functor/Monad 的著名文章。

图片中的函子、应用程序和单子

这里,

足够简单。让我们通过说任何值都可以在上下文中来扩展这一点。现在,您可以将上下文视为一个盒子,您可以在其中放置一个值:

在此处输入图片说明

或者

以下是我们编写 fmap (+3)(仅 2)时幕后发生的事情:

在此处输入图片说明

我一直觉得Functor函子范畴论的概念,并从“盒子”,包装及解包到/的概念不匹配良好。

问题点 1。

fmap :: (a -> b) -> f a -> f b

https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Functor.html

在 Haskell 中,wrap&unwrap to/from "BOX" 的实际实现在哪里?

问题点2。

为什么函子范畴论的概念包装及展开从“盒子” /的概念不匹配呢?

编辑:

即使对于IOfunctor,在组合过程中,f也是解包的:

haskell functor category-theory category-abstractions

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