关于“当前主流操作系统的文件管理器是否缺少Monad操作”的一点思考

Maybe就是Some or None啊,说是tree太勉强的,不过说满足定义倒也算满足。

我只是不了解.也是一个文件夹而已。。。

然后..其实是一个软连接?

如果按照.其实是一种文件夹的说法,那windows的设计并没有错。

然而,如果.不是文件夹,则该设计在我的“文件夹是一个Monad”语境下有问题。

你可以把Folder Monad看成List Monad(它是一个容器,其类型参数a表示的是容器里元素的类型),List Monad里只能存放同一种类型。

按理说(unix)文件夹和文件都是文件,.和…是文件夹文件里指向上一级和自己的entry。

不是很清楚你说的map具体指什么?

我希望的是OS的文件管理器,如:Windows-Explorer支持flattern和return这两个原生操作(你可以认为是两个按钮或快捷键)来方便用户操作文件。

flattern 和 return这两个操作很简单,只要按一下按钮就可以了。

但是map操作就很复杂,它需要用户提供一个f操作,这个f可能是一个脚本代码,这一般不会做到图形界面上。。。

隨便支持个脚本语言就能做到,如果只是这种程度用不用 monad 都无所谓,辶弟归几下就完事了。

root/
├── folder1
│   ├── 1.jpg
│   └── folder2
│       └── 2.jpg
└── folder3
    └── 3.jpg

flatten 以后

1.jpg 2.jpg 3.jpg

然后做编辑操作,比如 reorder

2p.jpg 1p.jpg 3p.jpg

map 回原來的 folder hierarchy

root/
├── folder1
│   ├── 2p.jpg
│   └── folder2
│       └── 1p.jpg
└── folder3
    └── 3p.jpg

tag也有缺点:

  1. 当得到一个新文件的时候,你可能一时半会没法想出适合的tag
  2. 当tag越来越多后,你就不得不分类tag,然而这会遇到和树结构同样的问题。

不是。。。

  1. 比如:你对root做flattern,我所期望的结果是:
root/
├──1,jpg
└──3.jpg
└── folder2
    └── 2.jpg
  1. flattern是不能返回去的

比如:[[1,2,3], [4,5,6]] 这个东西flattern之后变成[1,2,3,4,5,6],但是它再也不能返回成为[[1,2,3], [4,5,6]] 了(当然如果做成图形界面命令,undo redo是可以支持的)。

那就这么点功能,隨価写个 BAT 不行么。我以为要做什么了不得的 pure functional file manager,看來是想多了。

用图形界面组件写脚本就不叫写脚本了啊?

1 个赞

是可以写脚本,但问题是:

  1. 这种操作非常具有共性,因为文件夹本质上是一种Monad,把Monad的两个操作单独抽象出来放到图形界面上(以两个按钮/快捷键的方式提供给用户)是有必要的。

  2. 对于复杂case,如果你写脚本的话,因为是一次性脚本(可以说是写了就扔),是巨大人力浪费,不如在图形界面上点点画画来的方便。

比如:

Monad Law可以保证这种新的替换规则的无歧义性。

确实,如果按照我之前的说法:在flattern时,如果遇到name conflict需要replacement时,确实需要写脚本,但这个脚本是只是hook在关键位置上的trigger,不需要重头写。

另一种更傻瓜式的方法是直接给出几个具体操作,比如:按照文件大小、日期等来进行replacement,这样就不需要写脚本。

我觉得命令行用户应该不需要纠结这些问题。

乃需要 macOS 的 finder 一类的东西,虽然不能replacement,但 filter 管够。不够还能 automator 自己加(想要什么有什

你字多,点赞 :joy::joy::joy::joy:

Windows 用 total commander 之类的定制下呗。另外楼上很多人提到的用 tag 或者 search/filter 都行吧,现在都叫智能文件管理,可能跟楼主想要的物理结构的更改有所差别。

不错,字多的原发性思考。学习到了新概念。 问题本身似乎很简单。 mv images/* . ; rm images ; 然后外面套一层iteration. 文件夹下只能有一种数据结构,Downloads文件夹将会是灾难,只有资深的博物学家和图书管理员能用。下载任何东西都得事先想好归类。最简单的情况,比如downloads文件夹下全部都是PDFs,当需要对他们分类的时候呢,操作繁复冗余。

Po想要操作系统层面上的更改,改kernel. “如非必要,勿增实体”, 增加了tag属性,又会引出一个tag system. 用tag的可行途径就多建symlinks.

我觉得你是没学好windows基本操作。

看一下文件管理器右上角的搜索框,在里面打*.jpg,好了,所有的jpg文件都平铺开来随便你怎么弄了。

搜索条件还可以存下来以后在用

1 个赞

不太同意, 激发源发性的思考弥足珍贵. 等熟稔之后会比较难. 比如"饿了, 要早饭". 等学完一套理论之后, 只能说" 最高指示, 为世界…, 为…, 人是…, 为…事业强壮体魄, …".

其他地方见到更多的满肚子概念, 满脑子浆糊, 比一张白纸差几个数量级.

想了一下:Unix like file system仍然解决不了type sound的问题。

因为 虽然 /foo/bar/1.jpg 可以当做 /foo/bar/./1.jpg 的语法糖,但是 /foo/bar/baz/也是 /foo/bar/./baz/的语法糖。

这样看的话,在`/foo/bar/./下仍然存在着裸文件和文件夹混用的情况。

而我所期望的是有一个专门的文件夹存放裸文件,比如:others。

你说的搜索本质上就是filter,然而filter是代替不了flattern。