Question: in magento promotions i created a new promotion that gives a discount of 15% on any product
the problem is that the rule calculates the discount on the already discounted special price

There's any way that the promotions will calculate the discount price by using regular price instead of using the special price?

Answer: 
I think I might be able to reproduce your issue. When I run from command line, or start with Ctrl-F5 ("start without debugging"), it runs near-instantly (after removing the printing). When I run with F5 ("debug") it appears to hang before the first line of `main` is executed. Is that what you are seeing?

Well, it isn't completely hung, it is just running very slowly... Execution without the debugger takes under 1 second on my machine, but with debugger attached it takes *over 2 minutes* before the first line of `main` is executed. Have you tried letting it run for that long?

I also notice (in VS 2013) that if I enabled Tools -> Options -> Debugging -> General -> "Use Managed Compatibility Mode" (i.e. use "old" debugger, not the new one released with VS 2013), then the perf problem disappears. I'd suggest trying that, as well.
This simple code works fine for me:

```
module Domain =
    let rec myFunc ps=
        match ps with
        | [] -> 0
        | h::t -> h + (myFunc t) 

    let callFuncWithDefault () = 
        myFunc [1;2;3;4;5;6]

    let deferred = myFunc [1;2;3;4;5;6]

let result = Domain.callFuncWithDefault()
let result2 = Domain.deferred

printfn "%A" result
printfn "%A" result2

```

*update:*
If You add `main` function it is also working:

```
[<EntryPoint>]
let main argv = 
    let result = Domain.callFuncWithDefault()
    let result2 = Domain.deferred

    printfn "%A" result
    printfn "%A" result2
    1 //just to return something

```

So it seems that the issue is somewhere inside Your `myFunc` function.

*update 2*:
Your specific code executes on my machine and gives some result:

> 
> [{Queens = [{Position = Position (8,5);}; {Position = Position
>  (7,2);};
>  {Position = Position (6,4);}; {Position = Position (5,7);};
>  {Position = Position (4,8);}; {Position = Position (3,6);};
>  {Position = Position (2,3);}; {Position = Position (1,1);}];};
> 
> 
> ...
> 
> 
>