summaryrefslogtreecommitdiff
path: root/doc/todo/type_level_OS_requirements
diff options
context:
space:
mode:
Diffstat (limited to 'doc/todo/type_level_OS_requirements')
-rw-r--r--doc/todo/type_level_OS_requirements/comment_2_5a1c0c54db25b039eda28e213e1e6263._comment43
-rw-r--r--doc/todo/type_level_OS_requirements/comment_3_124ceb79eaa4eacc9636147dde4c262c._comment8
-rw-r--r--doc/todo/type_level_OS_requirements/comment_4_8d14bbbec4e219015a80f80bf6124181._comment12
-rw-r--r--doc/todo/type_level_OS_requirements/comment_5_35dbd3a2eb073f4c456ac567aec569bd._comment16
4 files changed, 79 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.
+"""]]
diff --git a/doc/todo/type_level_OS_requirements/comment_3_124ceb79eaa4eacc9636147dde4c262c._comment b/doc/todo/type_level_OS_requirements/comment_3_124ceb79eaa4eacc9636147dde4c262c._comment
new file mode 100644
index 00000000..230eccab
--- /dev/null
+++ b/doc/todo/type_level_OS_requirements/comment_3_124ceb79eaa4eacc9636147dde4c262c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2016-03-08T21:06:08Z"
+ content="""
+Asked about what I'm stuck on:
+<http://stackoverflow.com/questions/35878018/how-to-write-an-intersection-function-for-type-level-lists>
+"""]]
diff --git a/doc/todo/type_level_OS_requirements/comment_4_8d14bbbec4e219015a80f80bf6124181._comment b/doc/todo/type_level_OS_requirements/comment_4_8d14bbbec4e219015a80f80bf6124181._comment
new file mode 100644
index 00000000..5db7b68b
--- /dev/null
+++ b/doc/todo/type_level_OS_requirements/comment_4_8d14bbbec4e219015a80f80bf6124181._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2016-03-08T21:19:01Z"
+ content="""
+Ok, got intersectSupportedOS fixed.
+
+ *Propellor.Types.OS.TypeLevel> :t (intersectSupportedOS (combineSupportedOS freeBSD debian) debian)
+ (intersectSupportedOS (combineSupportedOS freeBSD debian) debian) :: OSList '['OSDebian]
+
+So, the type level OS lists are ready, on to the next step ... eventually ...
+"""]]
diff --git a/doc/todo/type_level_OS_requirements/comment_5_35dbd3a2eb073f4c456ac567aec569bd._comment b/doc/todo/type_level_OS_requirements/comment_5_35dbd3a2eb073f4c456ac567aec569bd._comment
new file mode 100644
index 00000000..e95a88c8
--- /dev/null
+++ b/doc/todo/type_level_OS_requirements/comment_5_35dbd3a2eb073f4c456ac567aec569bd._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2016-03-08T21:56:26Z"
+ content="""
+I got it to throw a nice type error when intersection of two OS lists
+yields an empty list:
+
+ Couldn't match type ‘'CannotCombineOS’ with ‘'CanCombineOS’
+ Expected type: 'CanCombineOS
+ Actual type: CannotCombineOS '['OSDebian] '['OSFreeBSD] '[]
+ In the expression: intersectSupportedOS debian freeBSD
+
+I think the next step would be actually adding the OSList to Property
+and making combining properties combine their OS lists at the type level.
+"""]]