summaryrefslogtreecommitdiff
path: root/doc/todo/integrate_shell-monad/comment_2_4e82a5994b4647b4483c92c7785ee905._comment
blob: 0779c49fb407d2b94266e4d350966486468df370 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[[!comment format=mdwn
 username="joey"
 subject="""comment 2"""
 date="2016-06-13T20:23:37Z"
 content="""
One easy way would be something like:

	shellMonadProperty :: Control.Monad.Shell.Script Result -> Property UnixLike

But, I don't know if that would really be useful. The better use case for
shell-monad seems to be where things like `userScriptProperty` take a
`Script`, that is currently an alias for `String`. Since shell-monad can
generate a shell script, it would be easy to write:

	shellMonad :: Control.Monad.Shell.Script () -> Script

Or, perhaps change userScriptProperty to accept either a stringy-Script or
a shell monad Script, via a type class. Then it could be used like this:

	userScriptProperty (User "joey") $ do
		cmd "echo" "hello"
		cmd "rm" "/home/joey/something"

Turtle seems to not have its own monad but simply uses MonadIO. So seems
you can use Turtle in the implementation of propellor properties the same as
other IO actions. Which is great, it should be easy to use it if you want
to. Something like:

	import Turtle.Prelude

	myProperty :: Property UnixLike
	myProperty = property "my property using turtle" $ liftIO $ do
		echo "hello"
		rm "/something"
		return NoChange

But I don't think turtle can generate shell scripts like used by
`userScriptProperty`.
"""]]