summaryrefslogtreecommitdiff
path: root/doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment
diff options
context:
space:
mode:
Diffstat (limited to 'doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment')
-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.
+"""]]