我知道这个问题以前已被问过很多次了,我已经仔细阅读了它们,但这并没有帮助我回答我的问题类型.我对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)
我怎么称呼过滤器?我所知道的是你传递的p是一个列表
老实说,我一般都不知道什么是多态类型,我无法弄清楚多态类型的过滤函数.
我没有事件了解函数过滤器在if语句中的作用.
如果你能帮我解决这两个问题,我将非常感激.
有很多资源可以解释多态性,但我不理解它们.
你好有人可以解释一下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) 我有以下文件:
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 -> …
在范畴论中,函子的概念如下:
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 概念实现到代码中,似乎就不可能定义F或fmap像上图所示那样简单。
事实上,有一篇关于 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也是解包的: