Structuring a Library in SML

喜欢而已 提交于 2019-12-11 03:54:48

问题


I'm currently building a testing library in Standard ML (using Poly/ML as the interpreter). I have the following directory structure:

project/a.sml
project/src/b.sml
project/src/c.sml
...

Where a.sml is just a bunch of calls to use

use "src/b.sml"
use "src/c.sml"
...

b.sml, c.sml etc. are all structure definitions like this

structure ComponentX
struct
...
end

which form nice, logically separated components of the library. I sometimes also create one module in one file, and then introduce a substructure within the same module in another file.

I can then use the testing library fine within the root directory of the project, by calling use "a.sml".

However, I can't seem to be able to use the code outside of its own directory, which is a bit of an issue. For example, say I'm in the parent directory of project. If I then call use "project/a.sml", the subsequent calls to use "src/x.sml" try to find a src directory in the parent (which doesn't exist).

Is there some way to do a relative use, or is there a better way to structure this altogether?


回答1:


The use function itself in Poly/ML doesn't change the path when it is used recursively. You will need to change the path within the sub-directory explicitly using OS.FileSys.chDir. use is just a function so you could redefine it if you wanted. The OS.Path and OS.FileSys structures could be useful.

An alternative is to reorganise your code to make use of PolyML.make. You would have to rename your files to match the name of the structure that each file contains e.g. ComponentX.sml would contain structure ComponentX. For more on this see polyml.org/documentation/Reference/PolyMLMake.html or a this answer about Poly/ML with nested directory structures.



来源:https://stackoverflow.com/questions/30370665/structuring-a-library-in-sml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!