summaryrefslogtreecommitdiff
path: root/doc/todo/type_level_OS_requirements
diff options
context:
space:
mode:
authorJoey Hess2016-03-08 15:08:58 -0400
committerJoey Hess2016-03-08 15:09:17 -0400
commit4992b53724d6c4dec3899cd6c52163b4548abd7c (patch)
tree28796f43c41495a3fd24701903759e6b7f73807e /doc/todo/type_level_OS_requirements
parent798a86d098c725c21fafde203961ba0e2433f09c (diff)
document status
(cherry picked from commit 6d52245a574e65275f818d90839737f0074b045f)
Diffstat (limited to 'doc/todo/type_level_OS_requirements')
-rw-r--r--doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment43
1 files changed, 43 insertions, 0 deletions
diff --git a/doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment b/doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment
new file mode 100644
index 00000000..27aaf0cd
--- /dev/null
+++ b/doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2016-03-08T18:44:25Z"
+ content="""
+I've made a typed-os-requirements branch that has type-level
+OS lists implemented.
+
+For example:
+
+ *Propellor.Types.OS.TypeLevel> let l = (debian `combineSupportedOS` freeBSD ) `intersectSupportedOS` unixlike
+ *Propellor.Types.OS.TypeLevel> l
+ OSList [OSDebian,OSFreeBSD]
+ *Propellor.Types.OS.TypeLevel> :t l
+ l :: OSList
+ (IntersectOSList
+ '[] '['OSDebian, 'OSFreeBSD] '['OSDebian, 'OSBuntish, 'OSFreeBSD])
+
+What this is lacking is type-level equality for OSList.
+The complicated type above should be equivilant to `OSList '[OSDebian, OSFreeBSD]`
+
+So, this doesn't type check yet:
+
+ foo :: OSList '[OSDebian, OSFreeBSD]
+ foo = (debian `combineSupportedOS` freeBSD ) `intersectSupportedOS` unixlike
+
+ src/Propellor/Types/OS/Typelevel.hs:47:46:
+ Couldn't match expected type ‘IntersectOSList
+ '[]
+ '['OSDebian, 'OSFreeBSD]
+ '['OSDebian, 'OSBuntish, 'OSFreeBSD]’
+ with actual type ‘'['OSDebian, 'OSFreeBSD]’
+ In the expression:
+ (debian `combineSupportedOS` freeBSD)
+ `intersectSupportedOS` unixlike
+ In an equation for ‘foo’:
+ foo
+ = (debian `combineSupportedOS` freeBSD)
+ `intersectSupportedOS` unixlike
+
+Also, `intersectSupportedOS` should have an additional constraint,
+to prevent it from generating an empty type-level list.
+"""]]