<zimoun>it is interesting because they do not mention funflow by Tweag which is a layer of the top of Nix managing kind of workflows.
<zimoun>Well, the interesting part, IMHO, is about workflow and type.
<zimoun>What could be interesting is to have common “records” (BAM, Fastx, etc.) and be able to type check beforehand to know if the workflow makes sense or not. Instead of rely on kind of filename and string.
<zimoun>But I do not know if it is possible with Guile without introducing many macros or similar.
<rekado>zimoun: yes, I heard of bionix. (I think there was a paper?)
<rekado>I think it would be good to move away from file names, but it’s not obvious how to do it.
<rekado>early GWL had no cache and no assumption about files being used as inputs or outputs
<rekado>so you could have a process that updates a database record, for example
<rekado>I don’t think types are necessarily the right answer, though.
<rekado>I don’t like the habit of encoding process progress information in file names.
<rekado>but I don’t know of any obviously better way
<zimoun>well Bistro (workflow on the top of OCaml) has type too. To me the issue with types is that you have to define them.
<zimoun>Well, few are aroud (BAM, FASTx, etc.) but it can be difficult when it is not provided by default.
<rekado>with programming languages I can see types prevent annoying problems, because composition of functions to purely functional programs can be very complex
<zimoun>Or if the process outputs more and you are not interested by the default type but another file.
<rekado>but for workflows I just don’t see the immediate benefit
<rekado>I guess typing inputs and outputs would allow for certain input/output filters
<rekado>the benefit of type checking the workflow seems not to be really practical to me
<zimoun>Well, Python is a raw workflow because it glues many things. And I can tell it is really annoying when the error is at the end. But indeed, GWL does breakpoints by writing the intermediate result to some files. So it becomes possible to just re-run the part which failed.