concept CSnippet { long snippetID; S type; S title, md5, transpilationMD5; File file() { ret snippetDB_textFile(snippetID); } S text() { ret loadTextFile(file()); } bool hasText() { ret fileExists(file()); } void setText(S text) { saveTextFile(file(), text); } int textLength() { ret hasText() ? fileSize(file()) : -1; } }